首页 > 解决方案 > 如何在 Angular 组件中模拟 ngrx 动作?

问题描述

//init函数的组件代码

this.rootStore.dispatch(new action1());

在我称之为“action1Success”的效果中

我在组件中有 action1Success 和订阅功能的管道

//组件代码

this.actionListener$.pipe( ofType(  MyactionTypes.action1Success)).subscribe((success: SuccessObj) => { });

标签: angularunit-testingkarma-runnerngrxeffects

解决方案


你可以使用provideMockActions

import { provideMockActions } from '@ngrx/effects/testing';
...
describe('RouterHistoryEffects', () => {
  let actions: ReplaySubject<any>;
  let effects: YourEffects;

  beforeEach(() => {
   TestBed.configureTestingModule({
    providers: [
      provideMockActions(() => actions)
    ]
  });
 ....

你的测试应该是这样的

// dispatch your action

(actions$ as ReplaySubject).next({ type: '[Users] Get Users' })

// subscribe to the Effect stream
effects.getUsers$.subscribe(action => {
 expect(action).toEqual({
  type: '[Users API] action1Success',
  users: [...],
});
});

推荐阅读