2017-11-03 1 views
0

입력 필드에서 사용할 수있는 문자를 제한하기 위해 작성한 유틸리티에 대한 단위 테스트를 작성하려고합니다. 이 메서드는 키보드 이벤트를 사용하여 실행 된 event.code를 확인하고 true 또는 event.preventDefault()를 반환합니다. 이것은 잘 작동하지만 jasmine/karma에서 테스트 할 수는 없습니다. KeyboardEvent에 대한 각도 4 단위 테스트

<input [(ngModel)]="donationValue" formControlName="donationAmount" 
type="tel" class="donation-amount" (keydown)="checkCharacter($event)" 
placeholder="Enter Amount..."/> 

템플릿

에서

전류 입력은 여기에 내 현재 테스트입니다

it('should return have defaultPrevented as true', fakeAsync(() => { 
     const goalInput = 
fixture.debugElement.query(By.css('input.donation- 
amount')).nativeElement; 
     const keyEventData = { isTrusted: true, code: 'KeyA' }; 
     const keyEvent = new KeyboardEvent('keydown', keyEventData); 
     goalInput.dispatchEvent(keyEvent); 
     tick(); 
     fixture.detectChanges();     
     expect(keyEvent.defaultPrevented).toBe(true); 
    })); 

나는 방법에 염탐하고 그들이 떨어져 해고되는 다른 시험이있다. 내 의혹은 isTrusted 속성이 true로 설정하려고해도 false로 설정된다는 것입니다.

+0

HTML 및 구성 요소 코드를 게시물로 업데이트하십시오. – Aravind

답변

0

의 I 사용 결국 대답이 있었다 : 응답자 중 하나는, 내가했습니다 것과 (진정한 isTrusted의 keyPressed 이벤트를 생성하는 것은 불가능 대답으로

it('Should call prevent default', inject([ManageUtils], (manageUtils: ManageUtils) => { 
    const keyEvent = new KeyboardEvent('keydown', { code: 'KeyA' }); 
    const spy = spyOn(keyEvent, 'preventDefault');   
    manageUtils.checkCharacterForProperCurrency(keyEvent); 
    fixture.detectChanges(); 
    expect(spy).toHaveBeenCalled() 
})); 

it('Should not call prevent default', inject([ManageUtils], (manageUtils: ManageUtils) => { 
    const keyEvent = new KeyboardEvent('keydown', { code: 'Digit0' }); 
    const spy = spyOn(keyEvent, 'preventDefault');   
    manageUtils.checkCharacterForProperCurrency(keyEvent); 
    fixture.detectChanges(); 
    expect(spy).toHaveBeenCalledTimes(0); 
})); 

독서). 그래서 이것을 테스트하기 위해 자스민 스파이를 사용하여 키보드 이벤트를 내가 만든 유틸리티 함수에 전달할 때 preventDefault가 호출되었는지 확인했습니다. 바라기를 이것은 누군가 시간을 절약 할 수있다. .. 나는 여기에 도착하기 위해 잠시 잡았다!

관련 문제