Угловое тестирование - Компонент с пользовательской инъекцией - StaticInjectionError - PullRequest
0 голосов
/ 30 августа 2018

У меня есть библиотека 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() для каждого теста отдельно

.. но ничего не работает. Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...