我的帖子设置与https://stackoverflow.com/a/42462579/1818048
相同但是我无法在我的Karama Jasmine测试中使用ServiceLoctor.inject.get - 注射器为空
deck[currentCard++]
在app.moudle模块中,我声明了以下内容,以便全局可用。
constructor() {
this.inject = ServiceLocator.injector.get(InjectionService);
this.configService = ServiceLocator.injector.get(ConfigService);
}
以下是我的测试设置的片段
export class AppModule {
constructor(private injector: Injector) {
ServiceLocator.injector = this.injector;
}
}
现在,当我运行测试时,ServiceLocator.injector为null。我如何让Karma Jasmin在父母身上设置这个或者这是不可能的?
答案 0 :(得分:0)
这个全局注入器在Angular中是一个值得怀疑的举动,因为它使应用程序单元依赖于其他应用程序单元(AppModule)并打破封装。
基本上,它应该在手动单元测试中完成:
beforeEach(inject(injector: Injector) => {
ServiceLocator.injector = injector;
}));
之后撤消:
afterEach(() => {
ServiceLocator.injector = null;
});
更好的举措是将全局注射器移动到单独的模块,因此它可以包含在试验台配置中。
答案 1 :(得分:0)
@estus你的必须是一个不同的版本,因为下面的代码为我工作。但是你让我走上了正确的道路,谢谢。
beforeEach(inject([Injector], (injector: Injector) => {
ServiceLocator.injector = injector;
}));