2017-08-01 55 views
3

未定义的返回值我试图了解如何使用作为新的HttpClientModule的一部分提供的嘲笑功能。我的测试代码几乎完全符合现有文档中显示的内容。然而,DOC例子是不完整的 - 例如,至少为TestBadinject import语句丢失。我假定是相同的HttpClient真从@角/普通/ HTTP。我的测试代码添加了这些。单元测试在Angular 4.3中的HttpClientModule:从HttpTestingController.expectOne(url)

该测试失败,如req最终的httpMock.expectOne呼叫后被未定义。我会很感激所有可能的洞察。

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集合,但不HttpClient, HttpTestingController

+3

正如在[GitHub的问题]向我解释(https://github.com/angular/angular/issues/18499#issuecomment-320434640)我在这开了,就没有必要明确提供'HttpClient'&'HttpTestingController '因为它们已经由'HttpClientTestingModule'提供。 –