获取控制台错误:在没有当前规范时使用'expect',这可能是因为异步测试超时?



这是我在service.ts文件中的代码

private isMessageShown = new BehaviorSubject({ visibility: false});
showMessage() {
const visibilityDetails = {
show: true,
};
this.isMessageShown.next(visibilityDetails);
setTimeout(this.hideMessage.bind(this), 3000);
}

hideMessage() {
this.isMessageShown.next({ visibility: false});
}
get messageVisibilityInfo() {
return this.isMessageShown.asObservable();
}

我的service.spec.ts代码与showMessage断言相关

it('should get message status', done => {
const result = service.messageVisibilityInfo;
service.showMessage();
result.subscribe(res => {
expect(res.visibility).toBeTruthy();
done();
});
});

测试用例工作正常,但我在控制台中出现了这个错误

Uncaught Error: 'expect' was used when there was no current spec, this could be because an asynchronous test timed out

我已经尝试解决这个错误几天了,任何帮助都将不胜感激

如果您正在实现一个服务,那么您必须有一个与之关联的UI组件,以便它呈现toast(我希望如此(。尝试删除计时器并以这种方式实现

ngOnInit(): void {
this.toastObservable.currentToastVisibility.subscribe((data) => {
// Do what every logic or work you want
if (data.visibility) {
setTimeout(() => {
this.toastObservable.hideToast();
}, 3000);
}
});
}
--spec.ts
it('should call ngOnInit', fakeAsync(() => {
component.ngOnInit();
spyOn(toaster, 'hideToast');
tick(3000);
expect(toaster.hideToast).toHaveBeenCalled();
}));

i在这里遇到了同样的问题,结果是我用setTimeout进行了测试。

所以。。清除setTimeOut(),它将运行

最新更新