请考虑以下服务方法
async save() {
return this.http.put('/api/foo', this.foo).toPromise();
}
通常我们可以这样测试:
it('should save the foo', async () => {
const http = TestBed.get(HttpTestingController);
const save = service.save();
http.expectOne('/api/foo').flush({ id: 1 });
expect(await save).toEqual({ id: 1 });
});
如果我们将save()
的实现更改为在调用http客户端之前等待另一个任务:
async save() {
await this.someOtherTask;
return this.http.put('/api/foo, this.foo).toPromise();
}
现在测试将失败,因为如果返回save()
,则当测试代码到达expectOne
调用时,尚未对http客户端进行调用。
有什么方法可以预先设置HttpTestingController
而不期望什么吗?旧的AngularJS $httpBackend
的{{1}}更加灵活。