我有这个功能:
getCars() {
const that = this;
this.carService.getAll().subscribe(function(cars) {
that.factoryService.setCars(cars);
this.unsubscribe(); <-------- how do I test this??
});
}
我到目前为止编写的单元测试非常简单:
describe('getCars', () => {
it('should call getAll() from carService, set cars and unsubscribe from getAll()', () => {
spyOn(component['carService'], "getAll").and.callThrough();
spyOn(component['factoryService'], "setCars");
component.getCars();
expect(component['carService'].getAll).toHaveBeenCalled();
expect(component['factoryService'].setCars).toHaveBeenCalled();
});
});
但是如何测试this.unsubscribe()
行?如何访问this
?
答案 0 :(得分:1)
您的代码看起来很混乱。我建议您不要调用退订,而要使用takeUntil。当组件被销毁时,TakeUntil将监听接收一个值的流。
只需使用以下库: https://www.npmjs.com/package/@w11k/ngx-componentdestroyed
getCars() {
this.carService.getAll()
.pipe(
untilComponentDestroyed(this)
)
.subscribe(cars => {
that.factoryService.setCars(cars);
});
}
从这开始,您只需要确保实现OnDestroy接口即可。
另一种更好的解决方案:在模板中使用|异步管道。
答案 1 :(得分:1)
您可以将Subscription分配给公共变量,并测试取消订阅方法的调用,例如:
this.subscription = this.carService.getAll().subscribe(cars => {
this.factoryService.setCars(cars);
this.subscription.unsubscribe();
});
正在测试
expect(component.subscription.unsubscribe).toHaveBeenCalled();