如何在执行多个异步任务的异步方法上设置HttpTestingController

时间:2019-09-20 08:02:43

标签: angular unit-testing

请考虑以下服务方法

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}}更加灵活。

0 个答案:

没有答案