Карма тест паста событие

1

У меня есть простой компонент, который обрабатывает событие 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

Что случилось с моим модульным тестом?

  • 0
    Вы пробовали это без fixture.detectChanges() ?
  • 0
    я сделал. тот же результат (
Показать ещё 4 комментария
Теги:
angular
karma-jasmine
karma-runner

1 ответ

0

Попробуй это:

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');
});
  • 0
    извините, но я получил тот же результат, Expected '' to be '123, 123'. я скопировал и вставил оба ваших примера без каких-либо изменений
  • 0
    может быть, вам нужно detectChanges прежде чем expect конце концов ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню