模拟JavaScript测试中setInterval返回的ID

时间:2018-07-13 07:52:40

标签: javascript unit-testing tdd jestjs setinterval

有什么方法可以模拟setInterval(...)返回的ID?

好奇的非关键细节:

我正在测试一个重击操作,该操作会将该ID传递到全局Redux状态(稍后在执行另一个操作时重置间隔)。因此,在测试中,我想断言我的动作是使用与setInterval(...)返回的ID完全相同的ID来调度的。

我当前正在使用jest.UseFakeTimers(),但是似乎没有用于模拟间隔ID的API,并且在观察模拟存储后,我的动作将以undefined作为间隔ID的有效载荷进行调度。

2 个答案:

答案 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中使用它……假设分配应该在回调中。