javascript - 单元测试 Angular 4 得到错误 `TypeError: Cannot read property ' 未定义的订阅'

标签 javascript angular unit-testing

我在单元测试中遇到错误 TypeError: Cannot read property 'subscribe' of undefined,如何解决?

我的部分代码:

规范

 it('makes expected calls', () => {
        const item1: item3 = fixture.debugElement.injector.get(item3);
        spyOn(comp, 'item5');
        spyOn(item1, 'item2');
        comp.item4();
        expect(comp.item5).toHaveBeenCalled();
        expect(item1.item2).toHaveBeenCalled();
    });

如果我删除规范的这一部分,我就会成功。

我使用 subscribe() 的方式是否正确?

最佳答案

尝试为为方法 isPeriodCycleOpen 创建的 spy 提供模拟 Observable Jasmine spy returnValue 为组件提供一些东西能够 订阅到:

import { Observable } from 'rxjs/Observable';

it('makes expected calls', () => {
    const mockResponse = { cyclePeriodOpen: true, deadLineCycle: 'foobar' };

    const cycleServiceStub: CycleService = fixture.debugElement.injector.get(CycleService);
    spyOn(comp, 'setChartData');
    spyOn(cycleServiceStub, 'isPeriodCycleOpen').and.returnValue(Observable.of(mockResponse));
    comp.getCycleStatus();
    expect(comp.setChartData).toHaveBeenCalled();
    expect(cycleServiceStub.isPeriodCycleOpen).toHaveBeenCalled();
});

希望对您有所帮助!

关于javascript - 单元测试 Angular 4 得到错误 `TypeError: Cannot read property ' 未定义的订阅',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48833007/

相关文章:

rest - 使用一个 REST 调用的 Angular2 多个组件

angular - 如何获取 firestore 时间戳

rest - Postman 测试脚本 - 检查状态是否为 NOT 200

javascript - Gmarker 自定义图标未显示完整尺寸

javascript - 如何在angularjs中显示和隐藏基于 bool 值的元素属性?

javascript - 我是wikipedia api调用,页面在jquery ajax调用后自动重新加载。页面内容显示然后重新加载

javascript - 渲染一个 React 子组件加上额外的属性?

javascript - 如何从 rest-api 在 Angular 中的图像上显示加载指示器

.net - 如何模拟(使用最小起订量)Unity 方法

maven - Kotlin-Maven不执行测试