【问题标题】:Mock the ID returned by setInterval in JavaScript tests在 JavaScript 测试中模拟 setInterval 返回的 ID
【发布时间】:2018-12-21 13:06:36
【问题描述】:

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

好奇心的非关键细节:

我正在测试一个 thunk 操作,该操作将该 ID 传递到全局 Redux 状态(以便稍后在另一个操作时重置间隔)。因此,在测试中,我想断言我的操作是使用从 setInterval(...) 返回的完全相同的 ID 发送的。

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

【问题讨论】:

  • 你能不能只模拟一个返回随机数的假setInterval()new Date().getTime()
  • 你能提供几个代码sn-ps来显示你的模拟等吗?
  • @KarlM 看到我自己对这个问题的回答,它提供了 sn-p。

标签: javascript unit-testing tdd jestjs setinterval


【解决方案1】:

我找到了一种方法来做到这一点,同时仍然使用jest 的 API 来伪造计时器。

const expectedIntervalId = 42;
jest.useFakeTimers();
setIntervalMock = (setInterval as jest.Mock);
setIntervalMock.mockImplementation(() => expectedIntervalId);

(注意:我使用 TypeScript)

然后我可以例如验证 clearInterval 是否使用模拟函数返回的相同 ID 调用。

【讨论】:

    【解决方案2】:

    如果您将setInterval 分配给一个变量,则该变量包含 id。在控制台中使用var x = setInterval(() => console.log(x), 500); 进行检查。不确定如何将其与jest.UseFakeTimers 一起使用...假设分配应该在回调中。

    【讨论】:

      猜你喜欢
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 2022-01-20
      • 2020-12-16
      • 2018-09-12
      • 1970-01-01
      • 2018-03-31
      相关资源
      最近更新 更多