У меня есть простой компонент, который обрабатывает событие insert в форме ввода.
Форма:
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')
событие 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
Что случилось с моим модульным тестом?
Попробуй это:
it('should reformat pasted data', () => {
component.onPaste(new ClipboardEvent('paste', {
dataType: 'text/plain',
data: '123\r123'
}));
expect(queryField.nativeElement.value).toBe('123, 123');
});
Или даже
it('should reformat pasted data', () => {
component.onPaste(new ClipboardEvent('paste', {
dataType: 'text/plain',
data: '123\r123'
}));
expect(component.searchForm.get('query').value).toBe('123, 123');
});
Expected '' to be '123, 123'.
я скопировал и вставил оба ваших примера без каких-либо изменений
detectChanges
прежде чем expect
конце концов ...
fixture.detectChanges()
?