我正在尝试为在主输入模块中定义的组件编写单元测试。由于此组件使用共享模块中定义的其他组件,因此我想模拟它们而不是创建它们。因此,我从模拟组件开始。这是一个示例:
@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
异常的原因... >