Предпочтительный способ вызова услуги более одного раза в тесте Angular / Jasmine - PullRequest
0 голосов
/ 02 июля 2019

Постараюсь сделать это кратко.Мой компонент получает данные от конечной точки REST.У меня есть фиктивный сервис для тестирования, который я настроил, чтобы дать мне другой набор данных при втором вызове.

В приведенном ниже коде есть некоторые примечания.Я заставил его работать на один тест, но он взорвал другой тест.Я предполагаю, что есть кое-что под простынями, которые я пропускаюХотя это не эта служба.

Компонент

getMessages(): void {
  this.myService.getData()
    .subscribe( (data: MyClass) => {
      this.myClass = data;
      // Do all the things to data
      // Do some stuff w/ the ag-grid api
    });
}

onGridReady(params) {
  // store ag-grid api
  this.gridApi = params.api;
}

Тогда мой тест

beforeEach( () => {
  spyOn(component, 'getMessages').andCallThrough();
});

it('should have data', () => {
  expect(component.myClass).toBeTruthy();
  expect(component.myClass).toEqual('something');

  // All good until here

  // From another answer, but doesn't seem to work:
  // (<jasmine.Spy>component.getMessages).and.callThrough();

  // This works, but blows up another test (makes it throw).
  // Weirdly, they don't share this service. 
  component.getMessages();
  fixture.detectChanges();
  expect(component.myClass).toEqual('somethingElse');
});

Затем несвязанный файл теста, который по некоторым причинам начинает давать сбой, если последние 3строки предыдущего теста не комментируются:

it('should create', () => {
  expect(component).toBeTruthy();
} 

Оба компонента используют и инициализируют gridApi одинаково.Оба теста проходили всегда до вышеупомянутой попытки загрузить данные из службы во второй раз.

Первый сбой - неперехваченная ошибка TypeError (я полагаю из ag-grid), поскольку она не может найти setRowData для undefined.(он пытается this.gridApi.setRowData).Оба теста имеют одинаковую конфигурацию TestBed и практически подражают друг другу.Очевидно, что-то настроено неправильно, что заставило меня спросить, ожидаете ли вы такого поведения, просто вызвав функцию spyOn () 'd?Кажется подозрительным.

...