2016-10-07 41 views
0

我只是想做這個工作。Angular 2:模板在測試中沒有更新

it('should have expected <h1> text', async(() => { 
    let fixture = TestBed.createComponent(AppComponent); 
    fixture.detectChanges(); 

    const sectionEl = fixture.debugElement.query(By.css("section")); 

    spyOn(fixture.debugElement.componentInstance, "runMe"); 

    sectionEl.nativeElement.click(); 
    expect(fixture.debugElement.componentInstance.runMe).toHaveBeenCalled(); 

    expect(sectionEl.nativeElement.textContent).toBe("changed!"); 

所以,runMe功能並沒有改變部分的文本,但諜顯示runMe被調用。

+0

你能編輯你的文章以包含你的'runMe'函數的代碼嗎? – jhhoff02

回答

0

很難說沒有看到一個更完整的例子。但通過點擊東西,它通常涉及異步事件處理。因此我們需要等待事件處理完成。在測試中,我們如何做到這一點是通過呼叫fixture.whenStable,這返回一個承諾。當承諾解決時,我們可以繼續測試。

sectionEl.nativeElement.click(); 
fixture.whenStable().then(() => { 
    expect(fixture.debugElement.componentInstance.runMe).toHaveBeenCalled(); 

    fixture.detectChanges(); 
    expect(sectionEl.nativeElement.textContent).toBe("changed!"); 
}); 
+0

我以前在我自己的項目中嘗試過這種方式,但它不起作用。我也在我的克隆本地副本angular 2 quickstart github repo中嘗試過這樣的事情,但它不起作用。 – coder

+0

您應該發佈一個完整的示例以獲得進一步的幫助 –

+0

peeskillet,我正在嘗試爲此設置一個Plunkr。你能幫助我使TestBed在src/test.spec.ts中工作嗎? – coder