2017-05-31 61 views
4

我嘗試爲我的Angular2應用程序進行測試。我還沒有製作嘲笑服務,所以我嘗試使用我的普通服務。ng測試沒有提供者爲Http!錯誤

確切的錯誤:

Error: No provider for Http! 
    at injectionError (http://localhost:9876/base/src/test.ts:1538:86) [angular] 
    at noProviderError (http://localhost:9876/base/src/test.ts:1576:12) [angular] 
    at ReflectiveInjector_.Array.concat.ReflectiveInjector_._throwOrNull (http://localhost:9876/base/src/test.ts:3077:19) [angular] 
    at ReflectiveInjector_.Array.concat.ReflectiveInjector_._getByKeyDefault (http://localhost:9876/base/src/test.ts:3116:25) [angular] 
    at ReflectiveInjector_.Array.concat.ReflectiveInjector_._getByKey (http://localhost:9876/base/src/test.ts:3048:25) [angular] 
    at ReflectiveInjector_.Array.concat.ReflectiveInjector_.get (http://localhost:9876/base/src/test.ts:2917:21) [angular] 
    at DynamicTestModuleInjector.Array.concat.NgModuleInjector.get (http://localhost:9876/base/src/test.ts:3864:52) [angular] 

我想測試組件的@Component是:

@Component({ 
    selector: 'app-game-board', 
    templateUrl: './game-board.component.html', 
    styleUrls: ['./game-board.component.css'], 
    providers: [GameBoardService] 
}) 

我試圖導入在spec.ts類(測試)的HTTP模塊,但我無法讓它工作。這裏是spec.ts

import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 
import { BrowserModule } from '@angular/platform-browser'; 
import { HttpModule } from '@angular/http'; 
import { GameBoardComponent } from './game-board.component'; 
import { GameBoardService } from "app/services/gameboardservice"; 

describe('GameBoardComponent',() => { 
    let component: GameBoardComponent; 
    let fixture: ComponentFixture<GameBoardComponent>; 

    beforeEach(async(() => { 
    TestBed.configureTestingModule({ 
     imports: [HttpModule], //this is where I try to import the HttpModule 
     declarations: [ GameBoardComponent ], 
     providers: [GameBoardService] 
    }) 
    .compileComponents(); 
    })); 

    beforeEach(() => { 
    fixture = TestBed.createComponent(GameBoardComponent); 
    component = fixture.componentInstance; 
    fixture.detectChanges(); 
    }); 

    it('should create',() => { 
    expect(component).toBeTruthy(); 
    }); 
}); 

我也是在測試類的供應商嘗試這個的代碼:

providers: [{ provide: Http, useValue: GameBoardService }] 

回答

7

您仍然需要提供HTTP到您的測試類,和你可能會想爲此使用MockBackend。

這是我相信你需要添加的行。

import { MockBackend } from '@angular/http/testing'; 
import { HttpClient } from '@angular/common/http'; 

在您的TestBed.configureTestingModule的供應商:

providers: [ 
    {provide: HttpClient, deps: [MockBackend]}, 
    ... 
], 
+0

沒錯!工作。在這裏看到更多的文檔和MockBackend的例子https://angular.io/api/http/testing/MockBackend –

相關問題