2016-10-07 4 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

Я пробовал это раньше в своем собственном проекте, и он не работает. Я также пробовал что-то подобное в моей клонированной локальной копии углового 2 quickstart github repo, и это не работает. – coder

+0

Возможно, вы можете отправить полный пример для дальнейшей помощи –

+0

peeskillet, я пытаюсь настроить Plunkr для этого. Можете ли вы помочь мне заставить TestBed работать в src/test.spec.ts. – coder

Смежные вопросы