我在验证测试时是否调用了异步方法时遇到了问题。这是一个简单的例子。
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()的测试。
答案 0 :(得分:0)
根据这个discussion,这是依赖性加载顺序的问题。
正如@choeller指出的那样,我更改了我的karma.conf.js,因此在zone.js和我的单元开始工作之前加载了system-polyfills.js文件。但是,我不能让你的剪辑工作。我想这是因为它们是概念证明而不是真正的单元测试,是吗?
无论如何,希望这可以帮助你。