Angular 派生类测试。失败:无法解析:(?,?)(5)的所有参数

Angular 派生类测试。失败:无法解析:(?,?)(5)的所有参数,angular,jasmine,angular5,karma-jasmine,Angular,Jasmine,Angular5,Karma Jasmine,我有一个带有抽象类、派生类和测试的简单结构。当我尝试运行Karma时,抛出以下错误: Failed: Can't resolve all parameters for ActivationsComponent: (?, ?). 这是我的抽象类: 导出抽象类DeviceDetailsWidget实现OnChanges{ @输入详细信息:设备详细信息; 抽象visibleForTypes=[]; 建造师 受保护el:ElementRef, 保护常数:常数 { } } 我的组件类: @组成部分{ 选

我有一个带有抽象类、派生类和测试的简单结构。当我尝试运行Karma时,抛出以下错误:

Failed: Can't resolve all parameters for ActivationsComponent: (?, ?).
这是我的抽象类:

导出抽象类DeviceDetailsWidget实现OnChanges{ @输入详细信息:设备详细信息; 抽象visibleForTypes=[]; 建造师 受保护el:ElementRef, 保护常数:常数 { } } 我的组件类:

@组成部分{ 选择器:“dd dp激活”, templateUrl:'./activations.component.html', 样式URL:['./activations.component.scss'] } 导出类ActivationComponent扩展DeviceDetailsWidget{ visibleForTypes=[this.constants.DEVICE\u SHORT\u TYPE.TOTO\u SINK]; } 还有我的测试:

描述“激活组件”,=>{ let组件:激活组件; let夹具:组件夹具; beforeachasync=>{ TestBed.configureTestingModule{ 声明:[激活组件] } .汇编组件; }; beforeach=>{ fixture=TestBed.createComponentActivationComponent; 组件=fixture.componentInstance; 夹具。检测变化; }; 它“应该创建”,=>{ expectcomponent.tobetruty; }; }; 我看到了与此类似的其他错误,但我不知道如何使其工作。这不是唯一依赖于这个抽象类的小部件。事实上,我有很多依赖于DeviceDetailsWidget的小部件,但这是最简单的


已编辑:我已更新ActivationComponent类。

您必须在ActivationComponent中调用DeviceDetailsWidget的构造函数,如下所示:

export class ActivationsComponent extends DeviceDetailsWidget {
   constructor()
   {
     super(elementRef, constants)
   }
}
constructor(
    @Inject(ElementRef) protected el: ElementRef,
    @Inject(Constants) protected constants: Constants
 )

这与其说是问题的实际解决方案,不如说是一种变通方法,但如果在基类构造函数中使用@Inject,则错误应该消失。这是一种痛苦,但与在所有依赖类上创建显式构造函数相比,这是一个相当小的痛苦。生成的基类构造函数如下所示:

export class ActivationsComponent extends DeviceDetailsWidget {
   constructor()
   {
     super(elementRef, constants)
   }
}
constructor(
    @Inject(ElementRef) protected el: ElementRef,
    @Inject(Constants) protected constants: Constants
 )

您可能必须在传递给TestBed.configureTestingModule的对象的提供程序数组中提供常量。

您介意分享有关ActivationComponent的更多详细信息吗。它可能是ActivationComponent上的DI@我刚刚添加了整个课程的内容。它是必须重写的属性值,因为它是一个抽象属性。我在数组中没有数据的情况下运行了测试:visibleForTypes=[]具有相同的结果。实际上,除非扩展类型还定义了构造函数,否则您不会这样做。@thierno barry我刚刚添加了整个类的内容。它是必须重写的属性值,因为它是一个抽象属性。子类中没有构造函数。我在数组中没有数据的情况下运行了测试:visibleForTypes=[],结果相同。@Agorreca不用担心;既然这对你有用,你介意把我的帖子作为答案吗?当然可以。我以为我做到了。再次感谢!