2017-06-27 15 views
2

在一個角反應形式我使用一個簡單的選擇元件:模擬在<select>元件的選擇

<select class="form-control" formControlName="item" id="item" [value]="form.get('item').value"> 
 
    <option *ngFor="let item of items" [value]="item.key">{{item.value}}</option> 
 
</select>

我想模擬在一個單元測試被選擇的一種元素:

(fixture.debugElement.query(By.css('option[value="item2"]')).nativeElement as HTMLElement).click(); 

選擇的作品,它是好元素(我可以改變它的屬性),但點擊不起作用。我試圖預先選擇元素:

(fixture.debugElement.query(By.css('select')).nativeElement as HTMLElement).click(); 

但仍然沒有。我也嘗試直接在DebugElement而不是nativeElement上調用triggerEventHandler,並以「item2」作爲參數。

所以我有點沒有選擇。

由於

+0

更新:fixture.debugElement.query(By.css( '選擇'))nativeElement.value = 'ITEM2';似乎選擇一個值,但不觸發將它綁定到FormControl值的事件。 – ThePainnn

回答

0

嘗試這種

let hl:HTMLSelectElement = (fixture.debugElement.query(By.css('select')).nativeElement as HTMLSelectElement); 
hl.value='newvalue'; //set the new value 
hl.dispatchEvent(new Event('change')); //this is what triggers angular to do its magic 
fixture.detectChanges(); 
tick(); //assuming you are doing this inside a fakeAsync 

Ç