Angular2 rc4异步测试
我在验证测试时是否调用了异步方法时遇到问题。下面是一个简单的例子Angular2 rc4异步测试,angular,jasmine,Angular,Jasmine,我在验证测试时是否调用了异步方法时遇到问题。下面是一个简单的例子 describe('async test', () => { it('promise should resolve', async(() => { let resolve = jasmine.createSpy('resolve').and.callFake((n) => { expect(n).toEqual(1); }); let
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();
}));
});
此测试失败,因为检查是否调用了解析的最终expect是在承诺解析之前执行的。如果我删除了最后一个expect,那么就无法验证承诺是否自然解决。下面是一个应该失败但没有失败的例子
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位于从未调用过的解析中,因此测试通过,即使它不应该通过,因为从未调用过解析。根据我的理解,Angular2的async()方法在所有异步方法完成之前不应该在中完成。然而,情况似乎并非如此。我可以使用Jasmine2的done函数,但是,在需要调用inject()或async()的测试中,这似乎不能很好地进行交互。根据这一点,这是依赖项加载顺序的问题
正如@choeller所指出的,我更改了karma.conf.js,以便在zone.js和我的单元开始工作之前加载system-polyfills.js文件。然而,我不能让你的剪报工作。我猜这是因为它们是概念证明,而不是真正的单元测试,是吗
无论如何,希望这能帮到你。我遇到了确切的问题。异步函数似乎根本不等待所有异步任务。