角度测试-具有自定义注入功能的组件-StaticInjectionError

时间:2018-08-30 11:33:56

标签: angular typescript testing dependency-injection

我有一个Angular库,该库通过forRoot获取API的配置:

static forRoot(api: Api): ModuleWithProviders {
  return {
    ngModule: XyzModule,
    providers: [XyzComponent, { provide: 'API', useValue: api }]
  };

}

模块将对象注入到a组件中:

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()函数

..但没有任何效果。有什么想法吗?

0 个答案:

没有答案