【发布时间】:2016-07-25 17:06:16
【问题描述】:
我在验证测试时是否调用了异步方法时遇到问题。这是一个简单的例子。
describe('async test', () => {
it('promise should resolve', async(() => {
let resolve = jasmine.createSpy('resolve').and.callFake((n) => {
expect(n).toEqual(1);
});
let promise = new Promise((resolve) => {
resolve(1);
});
promise.then(resolve);
expect(resolve).toHaveBeenCalled();
}));
});
此测试失败,因为在 promise 解析之前执行了最后一个期望检查是否调用了解析。如果我删除最后的期望,那么就无法验证承诺是否自然解决。这是一个应该失败但不会失败的示例。
describe('async test', () => {
it('promise should resolve', async(() => {
let resolve = jasmine.createSpy('resolve').and.callFake((n) => {
expect(n).toEqual(1);
});
let promise = new Promise(() => {});
promise.then(resolve);
}));
});
由于expect 处于从未调用过的resolve 中,即使它不应该通过,因为resolve 从未被调用过。据我了解,Angular2 的 async() 方法不应该在所有异步方法都完成之前完成,但是,情况似乎并非如此。我可以使用 Jasmine2 的 done 函数,但这似乎不能很好地与需要调用 inject() 或 async() 的测试交互。
【问题讨论】:
-
我遇到了确切的问题。 async 函数似乎根本不等待所有异步任务。