【发布时间】:2021-05-11 07:54:54
【问题描述】:
角度:9.1.13; RxJS:6.6.3;业力:4.3.0;茉莉花核:2.6.2
我们有一个具有服务的组件,它对流和事件进行处理。
通过调用this._destroy.next(),在ngOnDestroy钩子中声明为private _destroy = new Subject()的主题,当它被销毁时,每个此类组件方法都会取消订阅流/事件。
在我们运行单元测试之前,一切似乎都很好。方法和测试示例如下。
尚不清楚为什么使用takeUntil 订阅服务流/事件时测试失败。
(另一个用例)不使用返回具有pipe(takeUntil(destroy)) 的可观察对象的存根
使用 jasmine/karma 和 phantom.js 运行测试时出错
TypeError: undefined is not a constructor (evaluating 'this.service.getServicePackages().pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_9__["takeUntil"])(this._destroy))')
方法示例:
getServicePackages(): void {
this.service.getServicePackages().pipe(takeUntil(this._destroy)).subscribe(() => ... );
}
测试示例:
beforeAll(() => {
serviceStub = {
getServicePackages: () => ({ subscribe: () => ({}) }),
// v2 -> getServicePackages: () => ({ subscribe: (): Observable<TYPE> => of({}) }),
}
})
it('...', () => {
const serviceStub = TestBed.inject(PackageService);
spyOn(serviceStub, 'getServicePackage').and.callThrough();
spyOn(component, 'getServicePackage').and.callThrough();
component.getServicePackage();
expect(component.getServicePackage).toHaveBeenCalled();
expect(serviceStub.getServicePackage).toHaveBeenCalled();
})
【问题讨论】:
-
能否提供代码如何声明 serviceStub?
-
@Andrei,请查看更新的测试示例
标签: javascript angular typescript unit-testing rxjs