2016-10-01 2 views
0

Angular 2.0.0バージョンの新機能と変更点を学習しています。私はテストコンポーネント内のHTML要素のテキストコンテンツを取得することに問題があります。Angular2ユニットテストコンポーネント

これは私が

import { 
    Component, 
    Input, 
    Output, 
    EventEmitter 
} from '@angular/core'; 

@Component({ 
    selector: 'note-card', 
    template: ` 
    <div 
     class="note-card row shadow-1" 
     [ngStyle]="{'background-color': note.color}" 
     (mouseenter)="toggleCheck()" 
     (mouseleave)="toggleCheck()" 
    > 
     <div class="icon" *ngIf="showCheck" (click)="onChecked()"> 
     <i class="material-icons">check</i> 
     </div> 
     <div class="col-xs-12 title"> 
     {{ note.title }} 
     </div> 
     <div class="col-xs-12 value"> 
     {{ note.value }} 
     </div> 
    </div> 
    ` 
}) 
export class NoteCard { 
    @Input() note = {}; 
    @Output() checked = new EventEmitter(); 

    showCheck: boolean = false; 

    toggleCheck() { 
    this.showCheck = !this.showCheck; 
    } 

    onChecked() { 
    this.checked.next(this.note); 
    } 
} 

をテストしたい私のコンポーネントであり、これは、そのコンポーネント

import { 
    inject, 
    async, 
    TestBed, 
    ComponentFixture, 
} from '@angular/core/testing'; 
import { By } from '@angular/platform-browser'; 

import { Component } from '@angular/core'; 
import { NoteCard } from './note-card'; 

@Component({ 
    selector: 'note-card-test', 
    template: '<note-card [note]="note"></note-card>' 
}) 
class TestComponent { 
    note = { 
    value: 'note', 
    title: 'title', 
    color: 'red', 
    id: 1 
    } 
} 

describe('Note card',() => { 
    beforeEach(() => TestBed.configureTestingModule({ 
    declarations: [TestComponent, NoteCard] 
    })); 

    it('should have correct title', async(() => { 
    let fixture = TestBed.createComponent(TestComponent); 


    fixture.whenStable().then(() => { 
     const title = <HTMLElement>fixture.debugElement.query(By.css('.title')).nativeElement; 

     console.log(fixture.componentInstance.note.title); // returns 'title' 
     console.log(title); // return html element with empty text content 
     expect(title.textContent.trim()).toEqual('title'); // failed, title.textContent.trim() is equal to '' 
    }); 
    })); 
}); 

fixture.componentInstance.note.title戻っ「タイトル」 が、タイトルのためのユニットテストです.textContentが空です

何が間違っていた可能性がありますか?

答えて

0

私は)私が)コンポーネントテンプレート

it('should have correct title', async(() => { 
let fixture = TestBed.createComponent(TestComponent); 


fixture.whenStable().then(() => { 
    const title = <HTMLElement>fixture.debugElement.query(By.css('.title')).nativeElement; 

    fixture.detectChanges(); 

    console.log(fixture.componentInstance.note.title); // returns 'title' 
    console.log(title); // return html element with empty text content 
    expect(title.textContent.trim()).toEqual('title'); // failed, title.textContent.trim() is equal to '' 
}); 

}の現在の状態を取得するためにfixture.detectChanges()を呼び出す必要がことがわかりました。