2016-03-23 75 views
2

我試圖檢查下拉菜單是否在切換布爾值時顯示。 布爾是當布爾是@input已經做組件Angular2測試 - 未檢測到更改

@Component({ 
    selector: 'dropdown', 
    directives: [NgClass], 
    template: ` 
     <div [ngClass]="{open: open}"> 
     </div> 
    `, 
}) 

export class DropdownComponent { 
    @Input('open') open: boolean = false; 
} 

而且測試

it('should open', injectAsync([TestComponentBuilder], (tcb: TestComponentBuilder) => { 
    return tcb.createAsync(DropdownComponent) 
    .then(fixture => { 
     let el = fixture.nativeElement; 
     let comp: DropdownComponent = fixture.componentInstance; 

     expect(el.className).toEqual(''); 

     comp.open = true; 
     fixture.detectChanges(); 
     expect(el.className).toEqual('open') 
    }); 
})); 

我猜一些不同的輸入?

回答

4

您正在設置上的類open,但檢查DropdownComponent。這不一樣。

像這樣的東西應該做你想做的

var div = fixture.nativeElement.querySelector('div'); 
expect(div.className).toEqual('open'); 

var div = fixture.debugElement.query(By.css('div')); 
expect(div.className).toEqual('open'); 

又見How do I trigger a ngModel model update in an Angular 2 unit test?爲例。

+0

我console.log'd「el」,它是一個div。那麼開始時的nativeElement是什麼?它是否位於組件上方的某個容器? – Cuel

+1

它應該是'dropdown',你的組件的選擇器。元素的孩子應該是'div'。也許'TestComponentBuilder'不會爲你的組件創建一個合適的標籤。沒有仔細調查過。 –