痛苦的单元测试安排 In ANGULAR / Jasmine

Painful Unit test arrangement In ANGULAR / Jasmine

在 angular 中为我的单元测试配置测试模块真的很痛苦。 问题是我没有一种简单的方法来查看哪些是我的依赖项,所以我所做的是使用 ng test 启动 karma。然后,我在错误页面中看到缺少的组件、模块或服务。我添加了缺少的依赖项。 运行再次ng测试。等错误。添加缺失的...

这是一些单元测试所需的依赖项示例:

TestBed.configureTestingModule({
  declarations: [TestedComponent, X, Y, Z, A, B, C, D, E,F, G, H,I,J, K,L,M,N,O,P,Q,R,S,T,U,V,W, A2],
  imports: [HttpClientTestingModule, TranslateModule.forChild(), TooltipModule, CheckboxModule, FormsModule, ReactiveFormsModule, KeyFilterModule,
    DropdownModule, MultiSelectModule, CalendarModule, InputMaskModule, BlockUIModule, OverlayPanelModule, ProgressSpinnerModule,
    AutoCompleteModule],
  providers: [
    TranslateStore,
    {provide: XProvider, useFactory: () => createXServiceDummy()},
    DateTimeFormatPipe,
    {provide: YService, useValue: createYServiceServiceDummy()}
   ]
}).compileComponents();

准备所有需要的依赖项可能需要 1 个小时!!!太疯狂了!

你认为我做错了什么?你如何在你的项目中做到这一点? 如果我需要为我的服务添加间谍,它也会变得更加复杂!!

谢谢!

对于所有子组件,您应该提供存根组件而不是实际组件https://angular.io/guide/testing#stubbing-unneeded-components。这样,您就不必提供那些子组件或进一步的子组件的依赖关系,而只关注当前组件的依赖关系。

此外,对于存根组件,您可以使用这个库 https://www.npmjs.com/package/ng-mocks,它确实缩短了语法。

如果您已经这样做了,并且在一个组件中仍然有这么多子组件,也许您应该将它们组合在一起。