【发布时间】:2022-12-21 13:46:03
【问题描述】:
我正在尝试测试一个不允许我将任何数据粘贴到输入元素中的指令。
该指令如下所示:
import { Directive, HostListener } from '@angular/core';
/**
* Applied to an input, it blocks the paste functionality
*/
@Directive({
selector: '[kycBlockPaste]'
})
export class BlockPasteDirective {
/**
* Hooks for paste event and suppress it
*
* @param e
*/
@HostListener('paste', ['$event']) blockPaste(e: KeyboardEvent) {
e.preventDefault();
}
}
我想测试它的方式是,在添加粘贴 InputEvent 时输入的值应该改变,但事实并非如此。在应用指令和不应用指令的两种情况下,值都由空字符串表示。
关于如何测试它的任何想法?提前致谢 :)
测试看起来像这样:
@Component({
template: ''
})
class TestBlockPasteDirectiveComponent {}
fdescribe('Block Paste directive', () => {
let component: TestBlockPasteDirectiveComponent;
let fixture: ComponentFixture;
let inputEl: DebugElement;
let nativeEl: HTMLInputElement;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [TestBlockPasteDirectiveComponent, BlockPasteDirective]
});
fixture = TestBed.createComponent(TestBlockPasteDirectiveComponent);
component = fixture.componentInstance;
inputEl = fixture.debugElement.query(By.css('input'));
nativeEl = inputEl.nativeElement;
});
it('should hook for paste event and suppress it', () => {
const inputEvent = new InputEvent('paste', {
data: 'test input',
});
nativeEl.dispatchEvent(inputEvent);
fixture.detectChanges();
expect(nativeEl.value).toEqual('');
});
});type here
-
监视 HTMLInputElement::onchange 是否未被调用?