javascript - 用玩笑进行测试时,setInterval 不起作用
问题描述
我有一门课,我正在尝试运行 Jest 测试。该类(不是测试)在内部使用间隔。我正在尝试使用我在测试中创建的一些方法来测试它,如下所示:
const syncWait = ms =>
{
const end = Date.now() + ms;
while (Date.now() < end) continue;
};
let myObj = new MyClass(); //the constructor starts the interval
syncWait(5500);
expect(...
但是,似乎没有执行类本身的间隔。我放了一些 console.logs 并看到它确实到达了代码中设置间隔的点,如下所示:
this.intervalId = setInterval(() => this.sendIntervalMessage(), this.timeUntilSendMessages); //time here is 3000
但是,即使在间隔时间过去之后,它也不会执行。这是为什么?
解决方案
所以出于某种原因,用玩笑检查时间不会像那样工作,你必须模拟时间的流逝。
你这样做:
在测试的第一行,我添加了这一行:
jest.useFakeTimers();
不需要导入笑话对象。它在开玩笑测试中自动可用。这条线意味着我们没有使用实际时间,而是为我们提供了模拟(模拟)时间流逝的选项。
在类的代码中,我有一行调用例如setInterval(action, 3000)
,在测试中我们将调用:
jest.advanceTimersByTime(3000);
只有这样才会action
实际调用间隔的 。
推荐阅读
- rabbitmq - “目录名称无效。” 等在 Windows 上使用 rabbitmq-plugins
- javascript - 用变量替换括号之间的字符串
- python - 使用 Python 下载 CVS “下载 CSV” 按钮
- ios - 从自定义 UITableViewCells 中读取已编辑的 UITextFields
- python - Pygame.update 不会在每一轮后更新
- javascript - Can't perform a React state update on an unmounted component 警告
- c - 有没有办法检查文件系统在预处理器中是否不区分大小写?
- amazon-web-services - 了解 AWS 访问密钥的允许操作策略列表
- sql - 将 FOR XML 拆分为 baches
- python - 为什么我的 websocket 服务器只接受 1 个连接