Angular 5对正在测试的服务返回模拟HTTP响应

时间:2018-07-17 19:21:56

标签: angular testing mocking angular-httpclient

请原谅我的无知,我是Angular的新手。

在我目前的情况下,我有一个服务,该服务具有进行http调用的功能,并根据请求的有效负载返回true或false。问题是我不想模拟该函数返回的结果(是或否),我只是想模拟HTTP响应,然后让该函数确定这是真还是假。

service.ts

dothing(a: string, b: string): Observable<boolean> {
 return this.http.post('/route/', {'a': a, 'b': b})
   .map((payload => {
     if(payload['thingImLookingFor']) {
       return true;
     } else {
       return false;
     } 
  }
}

service.spec.ts

it('should call dothing via http post', () => {
  inject([Service, HttpTestingController, HttpClient],
    (service: Service, backend: HttpTestingController, http: HttpClient) => {

    service.login('foo', 'bar').subscribe((next) => {
      console.log('We Never Reach Inside Here Because I Never Log And The Test Passes');
      expect(next).toEqual(true);
    });

    const req = backend.expectOne('/route/');

    req.flush({
        error: '',
        thingImLookingFor: false
      });
  });
});

我想伪造该函数中的HTTP响应,但是我希望我的函数仍然可以将其分开,并确定它是否具有所需的内容,因为这是我要确保其正常运行的功能。我该怎么办?

我尝试将其拆分为多个功能,但最终结果很丑陋,实质上导致了对该功能所属工作流的完全重写。如果那是唯一的办法,我可以并且会做到,但是我想确保我不会错过一个更简单的解决方案

0 个答案:

没有答案