Angular2 Component: Eingabewertänderung des Formulars testen

Ich habe eine Texteingabe und ich höre auf die Änderungen.

mycomponent.ts

ngOnInit() {
    this.searchInput = new Control();
    this.searchInput.valueChanges
        .distinctUntilChanged()
        .subscribe(newValue => this.search(newValue))
}
search(query) {
    // do something to search
}

mycomponent.html

<search-box>
    <input type="text" [ngFormControl]="searchInput" >
</search-box>

Ausführen der Anwendung alles funktioniert gut, aber ich möchte es Unit-Test.

Also hier ist, was ich versucht habe

mycomponent.spec.ts

beforeEach(done => {
    createComponent().then(fix => {
        cmpFixture = fix
        mockResponse()
        instance = cmpFixture.componentInstance
        cmpFixture.detectChanges();
        done();
    })
})
describe('on searching on the list', () => {
        let compiled, input
        beforeEach(() => {
            cmpFixture.detectChanges();
            compiled = cmpFixture.debugElement.nativeElement;
            spyOn(instance, 'search').and.callThrough()
            input = compiled.querySelector('search-box > input')
            input.value = 'fake-search-query'
            cmpFixture.detectChanges();
        })
        it('should call the .search() method', () => {
            expect(instance.search).toHaveBeenCalled()
        })
    })

Test schlägt fehl, da das.search() Methode wird nicht aufgerufen.

Ich denke ich muss das @ setzvalue auf eine andere Art und Weise, damit der Test die Änderung erkennt, aber ich weiß wirklich nicht wie.

Hat jemand Ideen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage