派生类测试。失败:无法解析以下所有参数:(?,?)(角度5)

时间:2019-03-11 19:39:37

标签: angular jasmine angular5 karma-jasmine

我有一个带有抽象类,派生类和测试的简单结构。当我尝试运行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类。

2 个答案:

答案 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)
   }
}