我有一个简单的结构,有一个抽象类,一个派生类和一个测试。当我尝试运行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类。
这是一个解决方法,而不是问题的实际解决方案,但如果在基类构造函数中使用@Inject
,则错误应该消失。与在所有依赖类上创建显式构造函数相比,这是一个痛苦但相当小的一个。生成的基类构造函数如下所示:
constructor(
@Inject(ElementRef) protected el: ElementRef,
@Inject(Constants) protected constants: Constants
)
您可能必须在传递给Constants
的对象的提供者数组中提供TestBed.configureTestingModule
。
你必须在ActivationsComponent中调用DeviceDetailsWidget的构造函数,如下所示:
export class ActivationsComponent extends DeviceDetailsWidget {
constructor()
{
super(elementRef, constants)
}
}