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

问题描述 投票:0回答:2

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

angular jasmine angular5 karma-jasmine
2个回答
1
投票

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

constructor(
    @Inject(ElementRef) protected el: ElementRef,
    @Inject(Constants) protected constants: Constants
 )

您可能必须在传递给Constants的对象的提供者数组中提供TestBed.configureTestingModule


0
投票

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

export class ActivationsComponent extends DeviceDetailsWidget {
   constructor()
   {
     super(elementRef, constants)
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.