3
Ich versuche, eine Wrapper-Komponente um eine Texteingabe zu testen.Angular 2 testing mit ngModel und ngModelChange
Meine Komponente sieht wie folgt aus:
@Component({
selector: 'my-textbox',
inputs: ['inputModel', 'label'],
outputs: ['inputModelChange'],
template: `
<div ngForm class="field">
<label>{{ label }}</label>
<input type="text" ngControl="{{ control }}" #item="ngForm" [ngModel]="inputModel" (ngModelChange)="setTextValue($event)">
</div>
`
})
export class IslTextboxComponent {
control;
inputModel: Object;
inputModelChange: EventEmitter<any> = new EventEmitter();
label: string;
constructor() {
this.control = 'text'+ Math.floor(Math.random()*11);
}
setTextValue(newValue): void {
this.inputModel = newValue;
this.inputModelChange.emit(newValue);
}
}
Und hier ist mein Test:
describe('My Textbox Component',() => {
it('should show modify input model',
injectAsync([TestComponentBuilder], (tcb) => {
return tcb
.createAsync(MyTextboxComponent)
.then((fixture) => {
let nativeElement = fixture.nativeElement;
fixture.detectChanges();
let input = nativeElement.querySelector('input');
input.value = 'VALUE_TO_TEST';
//???
input.dispatchEvent(new Event('input'));
fixture.detectChanges();
expect(nativeElement.inputModel).toBe('VALUE_TO_TEST');
});
}));
});
Ich möchte die Eingabe von Text in das Textfeld und haben die inputModel selbst aktualisieren, aber das Ereignis nicht zu sein gefeuert. Wie kann ich das ngModelChange-Ereignis auslösen? Das InputModel wird nie aktualisiert ...
Ich habe Ihr Code versucht und teste ich für 'erwarten (fixture.componentInstance.inputModel) .toBe ('VALUE_TO_TEST')' oder 'erwarten (nativeElement.inputModel) .toBe ('VALUE_TO_TEST')' aber sie sind beide nicht definiert, was kann ich überprüfen, um sicherzustellen, dass das Modell aktualisiert wurde? – EnlitenedZA