Постараюсь сделать это кратко.Мой компонент получает данные от конечной точки 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?Кажется подозрительным.