为什么在函数式ngrx效果中使用inject()的行缺少代码覆盖率?

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

我正在开发一个 Angular 项目,并使用 karma.js 和 jasmine 来编写和执行单元测试。

我的问题是,如果我想在没有 TestBed 的情况下对功能 ngrx 效果进行单元测试,覆盖报告会将这些行报告为未覆盖,我将依赖项注入到我的效果函数中。

我创建了一个虚拟效果来演示该问题。

行动:

export const MyActions = createActionGroup({
  source: 'Dummy',
  events: {
    'Some action': emptyProps(),
  },
});

效果:

export const dummy = createEffect(
  (actions$ = inject(Actions)) =>
    actions$.pipe(
      ofType(MyActions.someAction),
      tap(() => console.log('inject line is not covered :(')),
    ),
  { functional: true, dispatch: false },
);

单元测试:

  it('should run as an example', (done: DoneFn) => {
    const actionsMock$ = of(MyActions.someAction());

    dummy(actionsMock$).subscribe(() => {
      expect(true).toBe(true);
      done();
    });
  });

图像形式的覆盖率报告(以红色显示该线未被覆盖):

enter image description here

我发现使用 TestBed 可以避免上述问题,如本 github 问题中所述:https://github.com/ngrx/platform/issues/3668#issuecomment-2093221356,但我想保留 TestBed为了简单起见,对 ngrx 效果进行了单元测试。

angular unit-testing ngrx ngrx-effects karma-coverage
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.