【问题标题】:Can we configure Injector in TestBed我们可以在 TestBed 中配置 Injector
【发布时间】:2018-12-09 12:04:59
【问题描述】:

我正在为 Angular 中的自定义 ErrorHandler 编写测试用例。在构造函数中,我添加了 Injector 的依赖项,因为我了解到提供程序在 ErrorHandler 之后被初始化。如下所示:

export class ApplicationErrorHandler implements ErrorHandler {
    constructor(injector: Injector) {
       this.injector = injector;
    }
}

现在在编写测试用例时,我应该如何创建我的错误处理程序。我可以将 Injector 添加为提供程序,还是可以按如下方式添加:

errorHandler = injector.get(ApplicationErrorHandler);

在任何情况下,我都会将 errorHandler 视为未定义并出现以下错误:

Error: Unexpected value '[object Object]' imported by the module 'DynamicTestModule'

感谢任何有关如何以我可以测试的方式编写它的帮助。谢谢!

【问题讨论】:

  • 你能发布你的 DynamicTestModule
  • 我没有这样配置任何模块。但下面是我的试验台。 beforeEach(async() => { TestBed.configureTestingModule({ providers: [ ApplicationErrorHandler, LoggerService, Injector ], imports: [RouterTestingModule, AppInsights] }).compileComponents(); injector = TestBed.get(InjectionToken); errorHandler = injector.get(ApplicationErrorHandler); //errorHandler = new ApplicationErrorHandler(<any> injector); spyOn(errorHandler, 'logError'); });
  • AppInsights 模块还是service?当您在导入数组或任何其他错误组合中错误地提供服务时,经常会出现此错误。 stackoverflow.com/questions/40014712/…

标签: angular karma-jasmine angularjs-injector


【解决方案1】:

当您在 Module 中错误地提供 Providers 时,通常会发生上述问题,反之亦然。只需仔细检查您是否在提供程序下的模块和服务下正确导入了模块。

相关参考。

【讨论】:

  • 这两个都不能加。这现在有效。谢谢Sajeetharan!
  • 您能解释一下出了什么问题以及您是如何解决的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-16
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多