2017-11-03 14 views
0

入力フィールドで使用できる文字を制限するために作成したユーティリティの単体テストを作成しようとしています。このメソッドはキーボードイベントを受け取り、発生したevent.codeを判別し、trueまたはevent.preventDefault()を返します。これは素晴らしいですが、私はジャスミン/カルマでテストすることはできません。 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); 
    })); 

私は法に見張られており、それらがオフに解雇されている他のテストを持っています。私が疑問に思うのは、trueに設定しようとしても、isTrustedプロパティがfalseに設定されているということです。

+0

HTMLとコンポーネントコードをポストに更新してください – Aravind

答えて

0

私が使用して終了答えは、このでした:応答の一つは、私がしてきたことから、(真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); 
})); 

読む)。これをテストするために、ジャスミンスパイを使って、私が構築したユーティリティ関数にKeyboardEventを渡したときにpreventDefaultが呼び出されたかどうかを確認しました。うまくいけば、これは誰かの時間を節約することができます...私はここに行くには時間がかかりました!

関連する問題