Angular 派生类测试。失败:无法解析:(?,?)(5)的所有参数
我有一个带有抽象类、派生类和测试的简单结构。当我尝试运行Karma时,抛出以下错误: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, 保护常数:常数 { } } 我的组件类: @组成部分{ 选
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不用担心;既然这对你有用,你介意把我的帖子作为答案吗?当然可以。我以为我做到了。再次感谢!