Жасмин вызывает функцию поиска члена, но не может получить ответ или ошибку - PullRequest
0 голосов
/ 20 февраля 2019

Я новичок в Жасмин, и я тестирую через пользовательский интерфейс, поэтому после ввода значений в поле ввода поиска и запуска события keyup вызывается функция поиска, которую я подтвердил, регистрируя в разных точках, но вызов API не инициируется, чтовнутри функции поиска.Нужно ли использовать await или что-то в этом роде?

dashboard.spec file

  beforeEach(() => {
    inputElement = fixture.nativeElement.querySelector('input[name=search]');
    inputElement.focus()
    inputElement.value = '131420'
    inputElement.dispatchEvent(new Event('input'));;
    fixture.detectChanges();
    keyUp().then(async () => {
      expect(component.searchText).toEqual(inputElement.value)
    });
  });

  it('should update the input', () => {
    fixture.detectChanges();
    console.log(component, 'component')
  })

  function keyUp() {
    inputElement.dispatchEvent(new KeyboardEvent('keyup', { 'key': 'Space' }));
    fixture.detectChanges();
    inputElement.blur();
    return fixture.whenStable();
  }

функция поиска, которая вызывается при запуске события keyup из пользовательского интерфейса:

 search(event) {
    if (event) {
      console.log(event, 'event');
    }
    vm.tabHeight = 385;
    vm.selectedContract = 0;
    vm.member = {};
    vm.finance = null;
    vm.accountId = null;
    vm.searchLoading = true;
    var searchText = vm.searchText;
    console.log(searchText, 'searchText')
    if (searchText) {
      searchText = searchText.replace(/\(/g, '');
      searchText = searchText.replace(/\)/g, '');
      searchText = searchText.replace(/\-/g, '');
      searchText = searchText.replace(/\&/g, '');
      console.log('here')
      vm.dashboardService.search(searchText)
        .subscribe(res => {
          console.log('got search response', res);
          vm.searchResult = res.hits;
          vm.searchLoading = false;
        }, err => {
          console.error('got search error', err);
          vm.searchLoading = false;
        });
    } else {
      vm.searchLoading = false;
    }
  }

1 Ответ

0 голосов
/ 20 февраля 2019

Вы делаете асинхронные вещи в beforeEach.Для этого необходимо использовать функцию обратного вызова, которая будет вызываться после завершения всей асинхронной работы:

beforeEach((done) => {
  promise.then(() => {
     done();
  });
}

Кроме того, вы, вероятно, не должны писать утверждения (ожидать) в функции настройки (beforeEach) но в вашем тестовом случае (это).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...