Angular:如何在共享模块中定义测试组件

时间:2018-11-13 22:01:14

标签: angular unit-testing testbed

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

@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异常的原因...

0 个答案:

没有答案