我正在尝试为我编写的实用程序编写单元测试,以限制输入字段可用的字符。该方法获取键盘事件并确定已触发哪个 event.code 并返回 true 或 event.preventDefault()。这很有效,但我无法在茉莉花/业力中测试它。
来自模板的当前输入
<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 属性设置为 false,即使我试图将其设置为 true。
所以 - 我最终使用的答案是这样的:
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);
}));
正如一位响应者回答的那样,不可能创建真正的 isTrusted 按键事件(根据我读到的内容)。因此,为了测试这一点,我使用了 jasmine 间谍来查看当我将 KeyboardEvent 传递给我构建的实用程序函数时是否调用了 PreventDefault。希望这可以节省某人的时间...我花了一段时间才到达这里!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)