2017-08-01 10 views
3

新しいHttpClientModuleの一部として提供される模擬機能を使用する方法を理解しようとしています。私のテストコードは、既存のドキュメントに表示されているものとほとんど同じです。ただし、docの例は完全ではありません。たとえば、少なくともTestBadinjectのimport文が欠けています。私は同じことが@ angle/common/httpからHttpClientに当たると仮定します。私のテストコードはこれらを追加します。ユニットテストHttpClientModule in Angular 4.3:HttpTestingController.expectOne(URL)からの未定義戻り値

呼び出し後にreqが未定義になるため、このテストは失敗します。私はそれがなぜ起こっているのかについての洞察に感謝します。

import { TestBed, inject } from '@angular/core/testing'; 
import { HttpClient } from '@angular/common/http'; 
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; 

describe('HttpClientTestingModule',() => { 
    beforeEach(() => TestBed.configureTestingModule({ 
    imports: [ HttpClientTestingModule ], 
    providers: [ HttpClient, HttpTestingController] 
    })); 

    it('expects a GET request', inject([HttpClient, HttpTestingController], (http: HttpClient, httpMock: HttpTestingController) => { 
    http 
     .get('/data') 
     .subscribe(data => expect(data['name']).toEqual('Test Data')); 

    const req = httpMock.expectOne('/data'); 
    expect(req).toBeDefined(); 
    expect(req.request.method).toEqual('GET'); 
    req.flush({name: 'Test Data'}); 
    httpMock.verify(); 
    })); 
}); 
+0

@MathijsSegers、 'httpMock.expectOne'への呼び出しが何とか失敗すると、' req'は未定義になります。それはここでは重要ではない、ほとんど私の部分に慣れている。 –

答えて

3

このような場合は、なぜ私は理解していないけど、私はそれがTestBed.configureTestingModuleから次を削除することで、作業ました:

providers: [HttpClient, HttpTestingController]

私は追加する必要がある理由に任意の洞察力を歓迎providersコレクションへの私の自身のサービス、しかしではない。

+3

[github issue](https://github.com/angular/angular/issues/18499#issuecomment-320434640)で私に説明したように、これを公開しました。明示的に 'HttpClient'と' HttpTestingController 'HttpClientTestingModule 'によって既に提供されているからです。 –

関連する問題