我正在开发一个 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();
});
});
图像形式的覆盖率报告(以红色显示该线未被覆盖):
我发现使用 TestBed 可以避免上述问题,如本 github 问题中所述:https://github.com/ngrx/platform/issues/3668#issuecomment-2093221356,但我想保留 TestBed为了简单起见,对 ngrx 效果进行了单元测试。