我有一个带有抽象类,派生类和测试的简单结构。当我尝试运行Karma时,会引发以下错误:
Failed: Can't resolve all parameters for ActivationsComponent: (?, ?).
这是我的抽象类:
export abstract class DeviceDetailsWidget implements OnChanges {
@Input() details: DeviceDetails;
abstract visibleForTypes = [];
constructor(
protected el: ElementRef,
protected constants: Constants
) { }
}
我的组件类:
@Component({
selector: 'dd-dp-activations',
templateUrl: './activations.component.html',
styleUrls: ['./activations.component.scss']
})
export class ActivationsComponent extends DeviceDetailsWidget {
visibleForTypes = [this.constants.DEVICE_SHORT_TYPE.TOTO_SINK];
}
我的测试:
describe('ActivationsComponent', () => {
let component: ActivationsComponent;
let fixture: ComponentFixture<ActivationsComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ActivationsComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ActivationsComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
我正在查看与此类似的其他错误,但是我不知道如何使它起作用。这不是依赖于此抽象类的唯一窗口小部件。实际上,我有很多取决于DeviceDetailsWidget的小部件,但这是最简单的。
已编辑:我已经更新了ActivationsComponent类。
答案 0 :(得分:1)
这不是实际解决问题的方法,但是,如果在基类构造函数中使用@Inject
,则错误应消失。与在所有从属类上创建显式构造函数相比,这是一个痛苦,但是却很小。生成的基类构造函数将如下所示:
constructor(
@Inject(ElementRef) protected el: ElementRef,
@Inject(Constants) protected constants: Constants
)
您可能需要在提供者数组中的Constants
上传递给TestBed.configureTestingModule
的对象。
答案 1 :(得分:0)
您必须像这样在ActivationsComponent中调用DeviceDetailsWidget的构造函数:
export class ActivationsComponent extends DeviceDetailsWidget {
constructor()
{
super(elementRef, constants)
}
}