2

我的项目中有一个很大的类层次结构,我不得不将大部分重复的代码提取到父类中,这些父类将被扩展,有孩子甚至孙辈。父类 -> 子类 -> 子类的子类。像这样的东西。为了避免重复构造函数和 super() 调用,我在父类中使用了 Injector.create({options}) 来注入一些必需的服务。现在的问题是我的所有测试都因 TypeError 失败:无法读取未定义的属性“get”。这是我所拥有的:

export abstract class ParentClass implements OnInit {
   protected router: Router;
   
   protected constructor() {
      this.router = AppModuleServices.injector.get(Router);
   }
}

现在 AppModuleServices 只是注入器的一个包装类,以便在我的整个项目中使用它。

export class AppModuleServices {
  static injector: Injector;
}

我在应用程序的模块中设置静态注入器,如下所示:

export class SomeModule {
  constructor(private injector: Injector) {
    AppModuleServices.injector = this.injector;
  }
}

一切正常,它正确地完成了它的工作,但 UT 都失败了。

我已经在 Karma Jasmine 测试中尝试了 Angular 2 在父级中实例化全局注入器但没有成功有谁知道在规范方面要做什么才能完成这项工作?

谢谢

更新:调试测试后,我发现实际上错误是:

ReferenceError: AppModuleServices is not defined

信息:AppModuleServices 实际上不是一个模块。如果重要的话,它只是一个导出的类。我试图将注入器放入实际的应用程序模块中,但试图在层次结构中使用它会产生循环依赖。但是,由于它在运行应用程序时工作,我认为这不是问题,关于模拟注入器的东西应该是我的解决方案。

4

0 回答 0