我正在尝试为主条目模块中定义的组件编写单元测试。由于该组件使用共享模块中定义的其他组件,我想模拟它们而不是创建它们。所以,我从模拟组件开始。这是一个例子:
@Component({ selector: "frt-dados-gerais", template: "" })
class DadosGeraisStubComponent {
@Input() utilizador: DadosUtilizadorInstancia;
@Input() gravacaoEmCurso = false;
@Output() atualizaDadosGerais = new EventEmitter<InfoDadosGerais>();
}
现在,由于我的共享模块正在导出frt-dados-gerais
组件,因此我尝试使用如下代码覆盖该模块:
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
HttpClientTestingModule,
NoopAnimationsModule,
RouterTestingModule.withRoutes(rotas),
BrowserModule,
ReactiveFormsModule,
PanelModule,
GrowlModule,
CoreModule,
SharedModule
],
declarations: [
DadosPessoaisComponent,
DadosGeraisStubComponent,
PalavraChaveStubComponent,
FuncoesDesempenhadasStubComponent,
IndisponibilidadeMotoristaStubComponent
],
providers: [
{ provide: UtilizadoresService, useValue: servicoUtilizadores },
{ provide: AutenticacaoService, useValue: servicoAutenticacao },
{ provide: ConfirmationService, useValue: utilizadoresService}
]
})
.overrideModule(SharedModule, {
remove: {
exports: [
DadosPessoaisComponent,
DadosGeraisComponent,
FuncoesDesempenhadasComponent,
IndisponibilidadeMotoristaComponent,
DadosGeraisComponent
]
}
})
如您所见,我尝试取消导出,这样我就不会收到错误提示该组件有两个定义。我显然错过了一些东西,因为我总是收到NullInjectorError: No provider for DadosPessoaisComponent
错误。
有人可以帮忙吗?
编辑:好的,终于弄清楚了。如此愚蠢的错误......所以,我使用TestBed.get
而不是TestBed.createComponent
创建被测组件......这就是我得到NullInjectorError
异常的原因......