2017-07-13 4 views
0

Ich versuche, einen Komponententest für eine Tastatureingabe zu schreiben. In meiner Komponente habe ich diese Funktion auf meine Tastatur-Ereignisse zu erfassen:winkel 2 einheit test: Wie tastatureingabe zu testen

@HostListener('window:keydown', ['$event']) 
    keyboardInput(event: any){ 
    if(event.code.toLowerCase()==="escape" && this.formProps.ausgeklappt){ 
     this.closeForm(); 
     } else if(event.code.toLowerCase()==="enter" && this.dayData.isSelected && !this.formProps.ausgeklappt) { 
     console.log("enter wurde gedrückt " + this.dayData.day); 
     this.handleHeaderClick(); 
    } 
    } 

Ich habe versucht, das ‚Flucht‘ Ereignis zu simulieren, scheiterte aber kläglich. Mein component.spec.ts sieht wie folgt aus:

it('should trigger escape event',() => { 
    component.formProps.ausgeklappt = true; 
    fixture.detectChanges(); 
    let spy = spyOn(component, "closeForm"); 
    const event = new KeyboardEvent("keypress",{ 
     "key": "escape" 
    }); 
    fixture.nativeElement.dispatchEvent(event) 

    component.keyboardInput(event); 
    expect(spy).toHaveBeenCalled(); 
    }); 

Ich weiß nicht, wie dieses Problem zu lösen, und ich bin für jede Hilfe dankbar ...

+1

Machen Sie den Test async zu ändern. –

Antwort

2

ich es ein ändern musste Asynchroner Test Danke an @peeskillet! Auch hatte ich "key": "escape"-"code": "ESCAPE"

it('should trigger escape event', async(() => { 
     component.formProps.ausgeklappt = true; 
     fixture.detectChanges(); 
     let spy = spyOn(component, "closeForm"); 
     const event = new KeyboardEvent("keypress",{ 
      "code": "ESCAPE", 
     }); 
     fixture.nativeElement.dispatchEvent(event); 

     component.keyboardInput(event); 
     expect(spy).toHaveBeenCalled(); 
     }));