Angular2 rc4异步测试

时间:2016-07-16 16:50:04

标签: angular jasmine

我在验证测试时是否调用了异步方法时遇到了问题。这是一个简单的例子。

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解析之前检查是否已调用resolve。如果我删除最终期望,则无法验证承诺是否自然解决。这是一个应该失败但不会失败的例子。

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);

     }));

 });

由于期望是在永远不会被调用的决心中,即使它不应该通过,因为决不会被调用。根据我的理解,Angular2的async()方法不应该完成,直到所有异步方法都已完成,但似乎并非如此。我可以使用Jasmine2的done函数,但是这似乎不能很好地交互,需要调用需要inject()或async()的测试。

1 个答案:

答案 0 :(得分:0)

根据这个discussion,这是依赖性加载顺序的问题。

正如@choeller指出的那样,我更改了我的karma.conf.js,因此在zone.js和我的单元开始工作之前加载了system-polyfills.js文件。但是,我不能让你的剪辑工作。我想这是因为它们是概念证明而不是真正的单元测试,是吗?

无论如何,希望这可以帮助你。