我有一个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()
函数..但没有任何效果。有什么想法吗?