如何在单元测试中获得此订阅。
.close.then((resolve: IModelInstance): void => {
resolve.status$.subscribe((status: Status): void => {
this._checkStatus(status);
});
});
this._checkStatus(status)有一些逻辑可以检查值以触发组件的输出。
现在到目前为止,在我的单元测试中,我已经嘲笑了返回解决方案回调的承诺:
......as Spy).and.returnValue({
close: new Promise((resolve: Function): void => {
closeResolve = resolve;
})
});
传递给closeResolve的数据如下:
beforeEach(async(() => {
closeResponseSubject = new Subject<Status>();
closeResponse = {} as Partial<Instance> as Instance;
closeResponse.status$ = closeResponseSubject.asObservable();
closeResponseSubject.next(Status.CREATED);
closeResolve(closeResponse);
}));
使用此appraoch时,在组件中,测试会进入“then”但不会进入susbcribe。我在这里看了不同的问题和答案,但到目前为止还没有运气。我只是不明白为什么测试不会进入订阅。我不知道
答案 0 :(得分:0)
无法弄清楚为什么订阅永远不会触发这个appraoch, 所以不要这样做:
.close.then((resolve: IModelInstance): void => {
resolve.status$.subscribe((status: Status): void => {
this._checkStatus(status);
});
});
我改为使用了这个实现:
.close.then((resolve: IModelInstance): void => {
this._checkStatus(resolve.status);
});
然后在单元测试中我有以下数据模拟 - promise模型保持不变:
closeResponse = {
status: Status.CREATED
} as Partial<Instance> as Instance;
...............................................
beforeEach(async(() => {
closeResolve(closeResponse);
}));
通过这样做,我不需要订阅status $来获取状态模型的值。我只是指向另一个属性状态,它也具有我感兴趣的价值。
就像@Antoniossss建议的那样:“整个想法是编写可以通过简单测试进行测试的可测试代码”。