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文件。然而,我不能让你的剪报工作。我猜这是因为它们是概念证明,而不是真正的单元测试,是吗


无论如何,希望这能帮到你。

我遇到了确切的问题。异步函数似乎根本不等待所有异步任务。