Я пытаюсь настроить тест для моей службы с помощью TestBed. Этот сервис имеет некоторые зависимости от других сервисов. Я создал файлы .stub для этих зависимостей и экспортировал их. Проблема в том, что когда я пытаюсь использовать эти заглушки в тесте, кажется, что методы тестирования используют реальный сервис, а не тест. Вот мои настройки (поддельные имена только для этой темы):
describe('ServiceToTest', () => {
let stubbedService: ServiceDependency1;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [],
providers: [
ServiceToTest,
{ provide: ServiceDependency1, useClass: ServiceDependency1Stub },
{ provide: ServiceDependency2, useClass: ServiceDependency2Stub }
]
});
stubbedService = TestBed.inject(ServiceDependency1);
});
it('description', fakeAsync(() => {
// Error appears here when trying to use the BehaviorSubject on the mock:
// Property 'behaviorSubjectTest' does not exist on type
'ServiceDependency1'
stubbedService.behaviorSubjectTest.next(new Test());
... more logic
}));
});
Я понимаю ошибку, потому что свойство behaviorSubjectTest
находится на заглушке, а не на реальной службе. Но почему он не использует сервис-заглушку, когда я указал его как useClass
в поставщиках?
Что я делаю не так? Когда я вижу, что доступно на serviceDependency1Stub
, я вижу все методы и свойства реального сервиса, а не заглушки. Это произошло после обновления до Angular 9. Раньше мы использовали метод .get
, а затем он работал. Затем он был настроен так:
describe('ServiceToTest', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [],
providers: [
ServiceToTest,
{ provide: ServiceDependency1, useClass: ServiceDependency1Stub },
{ provide: ServiceDependency2, useClass: ServiceDependency2Stub }
]
});
});
it('description', fakeAsync(() => {
const stubbedService = TestBed.get(ServiceDependency1);
stubbedService.behaviorSubjectTest.next(new Test());
... more logic
}));
});
А вот файл .stub:
export class ServiceDependency1Stub {
public behaviorSubjectTest = new BehaviorSubject<Test>(null);
}
Я полагаю, что установка при запуске была неправильной, но до этого не выставлялась после изменения на .inject
? Я посмотрел документацию, но не могу найти хороших примеров тестирования сервиса с зависимостями. Если бы кто-нибудь мог помочь мне и указать мне правильное направление, я был бы признателен за это. Спасибо.