我最近升级了一个从版本8到版本10的角应用程序。在这个应用程序中,我使用了类似于下面的模式的扩展类:
@Injectable()
export class MyBaseClass {
constructor(myDependencyService: MyDependencyService,...) {}
}
@Injectable()
export class MyExtensionClass extends MyBaseClass {
// no explicit constructor in extension class
}应用程序按预期运行,在扩展类实例化时,将所有依赖项正确注入基类构造函数。但是,当运行单元测试时,依赖项注入会崩溃,基类构造函数的所有参数都是未定义的。
查看浏览器开发工具中的编译源代码,扩展类的角生成工厂在执行测试时与运行应用程序时看起来完全不同:在运行测试时,编译的工厂在创建扩展类时不传递任何参数。
我遵循了升级到Ivy编译器的所有建议,所有使用DI的类都在应用程序中得到了正确的修饰和工作。在执行测试时,是否有一些特性会导致不同的编译结果?我是否错过了一些影响单元测试的配置更改?
更新:我已经将这个DI问题定位到代码覆盖率报告中。当我删除覆盖率选项时,将正确注入依赖项。在覆盖率报告和角编译器之间似乎存在一些冲突。我用的是业力报道-伊斯坦布尔-记者版本3.0.2。
发布于 2021-01-28 07:35:43
在tsconfig.spec.json:https://github.com/angular/angular-cli/issues/14860中针对tsconfig.spec.json(或更高版本)时,这是一个已知的问题。
解决办法是以es5为目标。
https://stackoverflow.com/questions/65842182
复制相似问题