【发布时间】:2018-01-11 20:05:27
【问题描述】:
我有一个史诗,它在 SOME_ACTION 之后 5 分钟后发出 SOME_OTHER_ACTION(使用延迟运算符)。 我想使用 jest 或 sinon useFakeTimers 方法来执行以下操作:调度一个动作,等待 5 分钟并测试是否调度了另一个动作。 我真的不想使用弹珠图,也不想注入 TestScheduler。 我也不想等待 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);
【问题讨论】:
-
您能详细说明问题是什么吗?
jest.runTimersToTime()应该可以工作。 -
但它没有,它从不发出 SOME_OTHER_ACTION。虽然,如果我像这样模拟延迟运算符:
Rx.Observable.prototype.delay = function () { return this }它会立即发出动作(5 分钟不要过去) -
对不起!我不知道究竟是什么问题以及如何重现它。
-
你能设置超时时间(将其添加到有效负载中)然后用 100 毫秒进行测试吗?
-
我可能可以,我昨天考虑过。现在这是一个很好的解决方案,但想象一下,如果我有很多史诗被延迟,我需要全部测试。连续运行测试。必须有模拟超时的方法......
标签: testing timer rxjs redux-observable