角度单元测试可在订阅方法不触发的情况下观察到



如何在我的单元测试中让这个订阅触发。

.close.then((resolve: IModelInstance): void => {
resolve.status$.subscribe((status: Status): void => {
this._checkStatus(status);
});
});

this._checkStatus(状态(有一些逻辑来检查值以触发组件的输出。

到目前为止,在我的单元测试中,我已经嘲笑了返回解析回调的承诺,如下所示:

......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 时,在组件中,测试确实进入了"然后",但没有进入 susbcribe。我在这里看了不同的问题和答案,但到目前为止没有运气。我只是很不明白为什么测试不会进入订阅。我不知道

未能弄清楚为什么订阅永远不会用这个appraoch触发, 因此,与其这样做:

.close.then((resolve: IModelInstance): void => {
resolve.status$.subscribe((status: Status): void => {
this._checkStatus(status);
});
});

我改用了这个实现:

.close.then((resolve: IModelInstance): void => {
this._checkStatus(resolve.status);
});

然后在单元测试中,我有以下数据模拟 - 承诺模拟保持不变:

closeResponse = {
status: Status.CREATED
} as Partial<Instance> as Instance;

.............

beforeEach(async(() => {
closeResolve(closeResponse);
}));

通过这样做,我不需要订阅 status$ 来获取状态模型的值。我只是指出另一个属性状态,它也具有我感兴趣的值。

就像@Antoniossss建议的那样:"整个想法是编写可以通过简单测试进行测试的可测试代码"。

相关内容

最新更新