У меня есть библиотека Angular, которая получает конфигурацию для API с forRoot
:
static forRoot(api: Api): ModuleWithProviders {
return {
ngModule: XyzModule,
providers: [XyzComponent, { provide: 'API', useValue: api }]
};
}
Модуль внедряет объект в компонент:
constructor(
...
@Inject('API') private api: Api
) { }
Это очень хорошо работает при сборке приложения или при запуске с ng serve
.
Однако, когда я пытаюсь протестировать компонент с помощью ng test
, я получаю следующую ошибку:
Error: StaticInjectorError(DynamicTestModule)[api]:
StaticInjectorError(Platform: core)[api]:
NullInjectorError: No provider for api!
Тестовый файл предоставляет объект Api:
describe('XyzComponent', () => {
beforeEach(async(() => {
const api: Api = { url: 'http://localhost:8080' };
TestBed.configureTestingModule({
declarations: [ XyzComponent ],
imports: [ ... ],
providers: [
{ provide: 'API', useValue: api }
]
})
.compileComponents();
}));
})
Я уже пробовал:
- Замена строкового токена на
InjectionToken
- Использование функции
inject()
для каждого теста отдельно
.. но ничего не работает. Есть идеи?