【发布时间】:2019-10-02 20:58:50
【问题描述】:
我在使用 karma 和 jasmine 执行测试脚本时遇到命令窗口中的错误问题,我也在使用 angular 7。我已经为监听粘贴事件的电话指令编写了单元测试。我的代码没有错误,但是当我运行测试时,我收到了这个错误。测试将运行并成功通过,我也获得了我想要的代码覆盖率,但是每次我运行单元测试时都会继续弹出这个错误。
ERROR in /phone/phone-mask.directive.
spec.ts(124,7): error TS2345: Argument of type '{
clipboardData: DataTransfer;
}'
is not assignable to parameter of type 'ClipboardEventInit'.
Object literal may only specify known properties, and 'clipboardData' does not exist in type 'ClipboardEventInit'.
我尝试在测试中创建一个事件以将数据复制到剪贴板并可能填充 clipboardData 变量,但这不起作用。它首先看到该值不存在,然后构建它并成功运行。
电话指令打字稿
@HostListener('paste', ['$event'])
onPaste($event: ClipboardEvent) {
$event.preventDefault();
let pastedInput: string = $event.clipboardData
.getData('text/plain')
.replace(/\D/g, ''); // get a digit-only string
if (pastedInput.length === 0) {
pastedInput = '';
} else if (pastedInput.length <= 3) {
pastedInput = pastedInput.replace(/^(\d{0,3})/, '($1)');
} else if (pastedInput.length <= 6) {
pastedInput = pastedInput.replace(/^(\d{0,3})(\d{0,3})/, '($1) $2');
} else {
pastedInput = pastedInput.replace(/^(\d{0,3})(\d{0,3})(.*)/, '($1) $2-$3');
}
this._phoneControl.control.setValue(pastedInput.substring(0, 14), {emitEvent: false});
}
手机测试规范
it('should test that paste event triggers and sets value to empty string if value is empty', () => {
fixture.detectChanges();
const dt1 = new DataTransfer();
const event1 = new ClipboardEvent('paste', {clipboardData: dt1});
event1.clipboardData.setData('text/plain', '');
inputEl.nativeElement.dispatchEvent(event1);
fixture.whenStable().then(() => {
expect(component.demForm.controls.PHONE.value).toEqual('');
});
});
我正在寻求帮助以解决此错误以及如何阻止错误显示在测试运行器 cli 中。提前谢谢你。
【问题讨论】:
标签: javascript angular unit-testing event-handling karma-jasmine