Angular 4:是否可以使用HttpClient进行隔离单元测试?

时间:2018-02-05 22:11:16

标签: angular unit-testing angular-services

我以为我跟随Angular guide for testing services,但这是一个没有测试的新项目,我们只是转而使用更新的HttpClient,而我见过的每个例子都使用了TestBed样板,我认为这给了我运行测试的问题。

有没有办法编写使用HttpClient的服务的隔离单元测试?

我想知道的第二部分是最佳实践。我对单元/集成测试仍然相当新,在我看过HttpClient的例子中,他们都使用HttpTestingController返回一个模拟结果。对于我的应用程序,API返回应用程序所期望的内容非常重要,因此我不应该针对真实服务进行测试而不是假装它按预期返回?如果没有,那么为服务编写测试的价值是什么?

1 个答案:

答案 0 :(得分:1)

使用真正的HttpClient进行不使用TestBed或其他Angular进样器的隔离测试是不可能的(或至少是不切实际的)。

在孤立测试中,应该模拟HttpClient来复制真实类,例如:

const httpClientMock = jasmine.createSpyObj('', ['get']);
httpClientMock.get.and.returnValue(Observable.of(['foo']);

const foo = new Foo(httpClientMock);
foo.makeRequest();
expect(httpClientMock.get).toHaveBeenCalledWith('/foo');