我有一个简单的组件,用于处理在表单输入框中粘贴事件。
表单:
this.searchForm = this.formBuilder.group({
query: [ null, [Validators.required] ]
});
onPaste(event) {
event.preventDefault();
const formattedQuery = event.clipboardData.getData('text/plain')
.split(/,?[\r\n\t]+\s?/)
.join(', ')
.replace(/,\s?$/g, '');
this.searchForm.get('query').setValue(formattedQuery);
}
现在我正在进行测试,它看起来像这样:
it('should reformat pasted data', () => {
const queryField = fixture.debugElement.query(By.css('input[type="search"]'));
queryField.nativeElement.dispatchEvent(new ClipboardEvent('paste', {
dataType: 'text/plain',
data: '123\r123'
}));
fixture.detectChanges();
expect(queryField.nativeElement.value).toBe('123, 123');
// also tried expect(component.searchForm.get('query').value).toBe('123, 123');
});
但是结果我得到了
Expected '' to be '123, 123'
如果我执行
console.log(queryField.nativeElement)
,它会显示输入框,但为什么它不能处理new ClipboardEvent('paste')
事件?<input class="ng-untouched ng-pristine ng-invalid" formcontrolname="query" type="search" ng-reflect-name="query">
您可以在此处找到完整的组件:https://stackblitz.com/edit/angular-cp9yhx?file=app%2Fhello.component.ts 我的单元测试有什么问题吗?
fixture.detectChanges()
? - pop325435956, 325435956
来自哪里?你在测试之前设置过吗?比如在 beforeEach 中? - popqueryField.nativeElement.dispatchEvent....
,而是尝试调用onPaste( new ClipboardEvent(....
,看看是否有帮助。 - popTypeError: queryField.nativeElement.onPaste is not a function
andTypeError: queryField.onPaste is not a function
- rel1x