如何轻松测试在 5 分钟后发出操作的可观察 redux 史诗



我有一个史诗,当SOME_ACTION后经过 5 分钟时发出SOME_OTHER_ACTION(使用延迟运算符(。我想使用jest或sinon useFakeTimers方法来执行以下操作:调度一个动作,等待5分钟,然后测试是否调度了另一个动作。我真的不想使用弹珠图,或者注入TestSchedulers。我也不想实时等待 5 分钟。

const timeBefore = new Date().getTime() / 1000;
store.dispatch(SOME_ACTION);
// wait 5 minutes
jest.runTimersToTime(5 * 60 * 1000);
expect(store.getActions()).toEqual([ SOME_ACTION, SOME_OTHER_ACTION ]);
expect(store.getActions()[1].time).toEqual(timeBefore + 5 * 60 * 1000);
所以我

最终做的是:用xstream替换RxJS,并使用适配器进行redux-observable,相应地修改了我的史诗。事实证明,Jest 在使用假计时器时无法正确处理日期,所以我将 lolex 用于假计时器。有关完整示例,请参阅我的要点。(我没有找到简单的方法来测试或替换内部 RxJS 延迟,所以我不得不使用不同的反应式库(。

clock.setTimeout(() => {
  expect(store.getActions()).toEqual([trainIncomingAction, reminderAction]);
  done();
}, 60 * 60 * 1001);
clock.runToLast();

最新更新