我正在测试一种返回承诺的服务方法。
当调度动作A, B, C
时,诺言就解决了。派发AFail, BFail, CFail
之一时,它被拒绝。
当测试通过时,它可以很好地完成并报告结果。但是,如果测试错误,则永远不会报告失败的测试,并且浏览器会无限期挂起。
这是测试代码:
// Here ommited TestBed declaration etc.
describe('initializeApp', () => {
let initializePromise: Promise<any>;
let promiseResolved: boolean;
beforeEach(() => {
initializePromise = appInitializerService.initializeApp();
promiseResolved = undefined;
initializePromise.then(() => promiseResolved = true).catch(() => promiseResolved = false);
});
it('should reject when A, BFail, C are dispatched (1 fail)',
fakeAsync(() => {
store.dispatch(new A());
store.dispatch(new BFail());
store.dispatch(new C());
flushMicrotasks();
console.log(promiseResolved); // log false as the promise is rejected
expect(promiseResolved).toEqual(true); // test fails and the result is never reported
// expect(promiseResolved).toEqual(false); // test passes and all is working
}));
});
我尝试用tick
而不是flushMicrotasks
玩,直接打电话给fail
,但无济于事。
为什么测试没有报告失败?