Angular 2测试:异步测试的正确方法是什么?
Angular 2 Testing: What's the correct way for async testing?
我在一个有karma和jasmine的angular 2项目中做了以下测试:
let a: any;
beforeEach(() => {
a = {};
setTimeout(() => {
a.test();
}, 1000);
});
it('should work with async and promise', async(() => {
return new Promise((resolve) => {
a.test = () => {
console.log('erster test');
assertThat(true, is(false));
resolve();
};
});
}));
it('should work with async and done', async((done) => {
a.test = () => {
console.log('zweiter test');
assertThat(true, is(false));
done();
};
}));
it('should work with done', (done) => {
a.test = () => {
console.log('dritter test');
assertThat(true, is(false));
done();
};
});
唯一有效的情况(意味着它失败)是最后一个只有"done"回调的情况。第二个我不确定,但第一个不应该是正确的方式来测试异步在angular 2?我认为与"async"你放置一个区域周围的功能,它正在等待返回的承诺?我试图使异步实现的意义,但我没有得到它:https://github.com/angular/angular/blob/master/modules/%40angular/core/testing/async.ts
在 async
方法中创建区域。所以你的setTimeout
(在beforeEach
中)不在那个区域内。如果您将setTimeout
移动到 async
回调中的,那么它就在该区域中,并且测试应该按预期工作(意味着等待异步任务完成)。
it('should work with async and promise', async(() => {
setTimeout(() => {
a.test();
}, 1000);
return new Promise((resolve) => {
a.test = () => {
console.log('erster test');
expect(true).toBe(false);
resolve();
};
});
}));
it('should work with async and done', async((done: Function) => {
setTimeout(() => {
a.test();
}, 1000);
a.test = () => {
console.log('zweiter test');
expect(true).toBe(false);
done();
};
}));
相关文章:
- Sinon-带有回调的存根函数-导致测试方法超时
- AngularJS列出了所有单元测试方法
- .done 或 .then 中的茉莉花测试方法
- 如何在 JavaScript 中测试方法而不会出错
- 渲染流星模板时执行的茉莉花测试方法
- 如果“beforeEach”中的代码是异步的,如何在 Jasmine 中测试方法
- 返回带有mocha的promise的测试方法调用
- 单元测试——方法中的模拟方法
- Javascript Regexp测试方法的怪异行为
- ReactJS的首选测试方法
- 在模块上使用sinon测试方法调用.出口的方法
- 正则表达式测试方法中的“g”如何交替工作
- Javascript测试方法不工作(如预期)
- 从窗口作用域函数调用的测试方法
- 如何测试方法是否只被调用了一次,而不是第二次在茉莉
- javascript测试方法未按预期工作
- 使用 sinonjs 测试方法调用的上下文
- JavaScript RegExp测试方法工作不稳定,我的意思是第一次执行和第二次执行的结果不同
- 角度分辨率的测试方法
- 其中记录了JavaScript正则表达式对象测试方法