我在编写一个Angular2应用程序,并且在使用Jasmine编写异步代码测试方面遇到了困难。出于某种原因,我没有看到很多似乎非常适用于我的情况的例子。
我目前正在尝试测试一个具有对另一个服务的异步依赖项的服务(而不是组件)。 我不确定在测试的哪个阶段检查异步调用的结果是有效的。是否可以在服务的异步处理程序内部调用expect()
?
service.foo()
.then((data) => {
//do I check the results in here?
expect(data).toEqual({ a: 1, b: 2 });
expect(mockDep.get).toHaveBeenCalled();
});
这是完整的测试。
import { TestBed, inject } from '@angular/core/testing';
import { MyService } from './my.service.ts';
import { MyDependency } from './dependency.service.ts';
class MockDependency {
doSomething(): Promise<any> {
throw Error('not implemented');
};
}
describe('some tests', () => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
MyService,
{
provide: MyDependency, useClass: MockDependency
}
]
});
});
});
it('should do something', inject([MyService, MyDependency], (service: MyService, mockDep: MyDependency) => {
spyOn(mockDep, 'doSomething').and.callFake(function () {
return Promise.resolve({ a: 1, b: 2 });
});
service.foo()
.then((data) => {
//do I check the results in here?
expect(data).toEqual({ a: 1, b: 2 });
expect(mockDep.get).toHaveBeenCalled();
});
}));
expect
放在then
中。在异步测试中,您需要使用async
或fakeAsync
包装inject
。 - Estus Flask