我正在尝试对一个应该使用假的http后端的服务进行单元测试,该服务由Angular的内存数据服务提供。这是相关的代码:
statusBarHidden
问题是我不能使用Jasmine的完成回调来处理异步 service.getCars()调用,因为inject函数的工作原理。我既不能使用 async 测试助手,因为它无法使用promises。所以我不知道如何等待承诺解决 - 测试只是在没有达到期待的情况下运行。
答案 0 :(得分:1)
使用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);
});
})));
另一个选择是根本不使用inject
。您可以从TestBed
获取服务。这是很多清洁工
let service: DataService;
beforeEach(() => {
const injector = TestBed.configureTestingModule({});
service = injector.get(DataService);
});
不需要inject
,而且不那么冗长。您现在可以使用done
。或者,如果您愿意,仍然使用Angular方式,并使用async
。
另见: