我有一个史诗,在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);
答案 0 :(得分:0)
所以我最终做的是:用xstream替换RxJS,并使用adapter用于redux-observable,相应地修改了我的史诗。 事实证明,当使用fakeTimers时,Jest没有正确处理Date,因此我使用lolex作为假计时器。 有关完整示例,请参阅我的gist。 (我没有找到简单的方法来测试或替换内部RxJS延迟,所以我不得不使用不同的反应库。)
clock.setTimeout(() => {
expect(store.getActions()).toEqual([trainIncomingAction, reminderAction]);
done();
}, 60 * 60 * 1001);
clock.runToLast();