Dal*_*vic 5 testing asynchronous angular
我正在尝试对一个服务进行单元测试,该服务应该使用由 Angular 的内存数据服务提供的假 http 后端。这是相关代码:
describe('getCars() method ', () => {
it('should return a resolved Promise', inject([DataService], (service: DataService) => {
service.getCars().then((value) => {
expect(value.length).toBe(3);
});
}));
});
Run Code Online (Sandbox Code Playgroud)
问题是我无法使用 Jasmine 的完成回调来处理异步service.getCars()调用,因为注入函数的工作原理。我也不能使用异步测试助手,因为它不能与承诺一起使用。所以我不知道如何等待承诺解决——测试只是运行而没有达到预期。
使用async,这会将其包装为一个区域,等待所有异步任务完成后再测试完成。
import { async } from '@angular/core/testing';
// !!!!!!!
it('should return a resolved Promise', async(inject([DataService], (service: DataService)=>{
service.getCars().then((value) => {
expect(value.length).toBe(3);
});
})));
Run Code Online (Sandbox Code Playgroud)
inject另一种选择是根本不使用。您只需从 获得服务即可TestBed。就清楚多了
let service: DataService;
beforeEach(() => {
const injector = TestBed.configureTestingModule({});
service = injector.get(DataService);
});
Run Code Online (Sandbox Code Playgroud)
不需要inject,而且它要简洁得多。您现在可以使用done. 或者,如果您愿意,仍然可以采用 Angular 方式,并使用async.
也可以看看:
| 归档时间: |
|
| 查看次数: |
7856 次 |
| 最近记录: |