Я следую официальному руководству по Angular, чтобы протестировать компонент, который вызывает функцию асинхронной службы: https://angular.io/guide/testing#component-with-async-service
Создание шпиона:
const gardenSpy = jasmine.createSpyObj('GardenService', ['getGardens', 'createGarden']);
gardenSpy.getGardens.and.returnValue(of(testGardens));
...
gardenServiceSpy = TestBed.get(GardenService);
Настройка TestBed для использования моего шпиона вместо фактического сервиса:
TestBed.configureTestingModule({
declarations: [ MyGardensComponent ],
providers: [
{ provide: GardenService, useValue: gardenSpy }
],
imports: [FormsModule, HttpClientTestingModule]
})
.compileComponents();
Затем модульный тест, который не работает:
it('should load the gardens', () => {
fixture.detectChanges();
component.getGardens();
expect(gardenServiceSpy.getGardens.calls.any()).toBe(true, 'getGardens called');
});
Как вы можете видеть из отчета о покрытии здесь, метод подписки никогда не выполняется, и утверждение шпиона не выполняется.
Согласно руководству по Angular, этот метод должен работать и позволить мне синхронно возвращать наблюдаемое. Вызов метода шпиона вручную работает и возвращается правильно, поэтому я предполагаю, что проблема связана с внедрением службы шпионажа, а не с созданием самого шпиона. Любая помощь будет оценена по достоинству!
Если вам нужно просмотреть все файлы, я сделал здесь плункер (на самом деле он не запускается, просто чтобы посмотреть файлы)