Angular 2在Karma Jasmine测试中实例化父级中的全局注入器

时间:2017-08-22 10:36:03

标签: angular typescript karma-jasmine

我的帖子设置与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在父母身上设置这个或者这是不可能的?

2 个答案:

答案 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;
  }));