有什么方法可以模拟setInterval(...)
返回的ID?
好奇的非关键细节:
我正在测试一个重击操作,该操作会将该ID传递到全局Redux状态(稍后在执行另一个操作时重置间隔)。因此,在测试中,我想断言我的动作是使用与setInterval(...)
返回的ID完全相同的ID来调度的。
我当前正在使用jest.UseFakeTimers()
,但是似乎没有用于模拟间隔ID的API,并且在观察模拟存储后,我的动作将以undefined
作为间隔ID的有效载荷进行调度。
答案 0 :(得分:1)
我找到了一种方法,同时仍使用jest
的API伪造计时器。
const expectedIntervalId = 42;
jest.useFakeTimers();
setIntervalMock = (setInterval as jest.Mock);
setIntervalMock.mockImplementation(() => expectedIntervalId);
(注意:我使用TypeScript)
然后我可以例如验证clearInterval
的调用方式与模拟函数返回的ID相同。
答案 1 :(得分:0)
如果将setInterval
分配给变量,则该变量包含ID。在控制台中使用var x = setInterval(() => console.log(x), 500);
进行检查。不知道如何在jest.UseFakeTimers
中使用它……假设分配应该在回调中。