2017-05-19 245 views
1

Angular 2和核心測試都是新手。角2茉莉花測試失敗

我有一個使用注入MovieService的MovieComponent。試圖學習,如此使用的路由參數。代碼按預期工作。

describe('MovieComponent',() => { 
let component: MovieComponent; 
let fixture: ComponentFixture<MovieComponent>; 
let options: RequestOptions; 
beforeEach(async(() => { 
TestBed.configureTestingModule({ 
    declarations: [ MovieComponent ], 
imports: [ 
HttpModule 
], 
providers: [ 
{ 
    provide: ActivatedRoute, useValue: { 
    params: Observable.of({ movieName: 'Bah' }) 
    } 
}, MovieService, Http, {provide: ConnectionBackend}, 
], 
    schemas :[NO_ERRORS_SCHEMA ] 
}) 
.compileComponents(); 
})); 

beforeEach(() => { 
options = new RequestOptions({method: RequestMethod.Get}); 
fixture = TestBed.createComponent(MovieComponent); 
component = fixture.componentInstance; 
fixture.detectChanges(); 
}); 

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

但是,我得到這個測試誤差:

TypeError: Cannot read property 'getMovies' of undefined 

在此先感謝。

+0

我假設你的電影服務有一個名爲getMovies方法。無論你傳遞什麼東西都沒有這種方法。我可以建議你嘲笑電影服務,並提供你自己的價值或類(useClass或useValue)。你只是在測試組件,所以你可能應該嘲笑服務。 – Maccurt

+0

也是你的電影服務返回一個可觀察或承諾? – Maccurt

回答

0

你在編譯器中運行它嗎?它是否編譯?我不認爲 { provide:MovieService }是正確的。只是通過MovieService象下面這樣:`

providers: [ 
    { 
     provide: ActivatedRoute, useValue: { 
     params: Observable.of({ movieName: 'Bah' }) 
     } 
    }, MovieService 
    ] 

`

+0

我正在使用typescript與Angular CLI來構建,測試和運行。我按照你的建議編輯了上面的測試代碼,並且還必須包含少數提供者,因爲測試發生錯誤 - ConnectionBackend,Http,Now th錯誤顯示爲「TypeError:無法讀取未定義的屬性'createConnection' – user2693135

+0

現在,同樣的問題,但與ConnectionBackend。 – gpanagopoulos

+0

爲了讓您瞭解單元測試如何在Angular 2中工作,您必須以與在AppModule中執行測試模塊和組件相同的方式構建測試模塊和組件。但是,這將會在測試環境中過度使用,您應該使用模擬依賴關係/服務。我建議您閱讀下面的文章,瞭解如何使用依賴項測試組件:https://angular.io/docs/ts/latest/guide/testing.html#!#component-with-dependency – gpanagopoulos