async
async
在完成所有任务之前不允许下一个测试开始。所做的是async
将回调包装在一个区域中,在该区域setTimeout
中跟踪所有异步任务(例如)。一旦所有的异步任务都完成了,那么就async
完成了。
如果你曾经在 Angular 之外使用过 Jasmine,你可能已经看到done
被传递给回调
it('..', function(done) {
someAsyncAction().then(() => {
expect(something).toBe(something);
done();
});
});
在这里,这是原生 Jasmine,我们告诉 Jasmine 这个测试应该延迟完成,直到我们调用done()
. 如果我们不打电话done()
而是这样做:
it('..', function() {
someAsyncAction().then(() => {
expect(something).toBe(something);
});
});
测试甚至会在预期之前完成,因为在测试完成执行同步任务后,promise 就会解决。
使用 Angular(在 Jasmine 环境中),done
当我们使用async
. 它将跟踪 Zone 中的所有异步任务,当它们全部完成时,done
将在后台调用。
在您使用配置的特定情况下TestBed
,您通常会在需要时使用它compileComponents
。我很少遇到必须以其他方式调用它的情况
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [MyModule],
schemas: [NO_ERRORS_SCHEMA],
})
.compileComponent().then(() => {
fixture = TestBed.createComponent(TestComponent);
});
}));
在测试使用的组件时templateUrl
(如果您不使用 webpack),Angular 需要发出 XHR 请求以获取模板,因此组件的编译将是异步的。所以我们应该等到它解决后再继续测试。