Ich kann nicht scheinen, ein Eingabefeld zu testen, das an ein Angluar2-Modell gebunden ist. Ich bin ein wenig neu, also bitte nimm mich mit.Angular 2 Testing Eingabefeld Bindung
Ich habe eine sehr einfache Angular2-Komponente, die ein Eingabefeld enthält, das an ein Modell gebunden ist.
<form>
<input type="text" [(ngModel)]="searchTerm" name="termsearchTerm" (keyup)="search()" value=""/>
</form>
Hier ist der Code hinter:
import { Component, Input, Output, EventEmitter } from '@angular/core';
@Component({
moduleId: module.id,
selector: 'sc-search',
templateUrl: 'search.component.html'
})
export class SearchComponent {
@Input() data: any;
@Output() onSearchTermChanged = new EventEmitter<string>();
private searchTerm: string;
search() {
this.onSearchTermChanged.emit(this.searchTerm);
}
}
Wenn Sie den folgenden Test läuft immer gleich 'John' undefined Erwartete zu werden. Ich erwarte, dass der Test bestanden wird.
searchableHierarchyComponentFixture.detectChanges();
let termInputDbg = searchableHierarchyComponentFixture.debugElement.query(By.css('input[name="termsearchTerm"]'));
let input = searchableHierarchyComponentFixture.nativeElement.querySelector('input');
input.value = 'John';
let evt = document.createEvent('Event');
evt.initEvent('keyup', true, false);
termInputDbg.triggerEventHandler('keyup', null);
input.dispatchEvent(evt);
tick(50);
searchableHierarchyComponentFixture.detectChanges();
searchableHierarchyComponentFixture.whenStable();
expect(searchableHierarchyComponentFixture.componentInstance.searchTerm).toEqual('John');
Fantastische Antwort. Vielen Dank! –
Die Tricks 'tick()' und 'input.dispatchEvent' haben mein Leben gerettet! – elli0t
Hey Leute, wie eine Antwort und die Frage an sich. Aber was ist Tick-Funktion hier? Ich habe jetzt dieselbe Situation. und möchte ngModel testen, das an die Eingabe gebunden ist. Brauche ich das Häkchen()? –