gpt4 book ai didi

javascript - Mocha 测试套件在 setInterval(...) 运行时永远不会结束

转载 作者:可可西里 更新时间:2023-11-01 09:57:36 27 4
gpt4 key购买 nike

我有一套测试,其中包含带有 setInterval(...) 调用的代码。

当通过 windows powershell 命令行在 mocha 中运行此代码时,所有测试都将运行,但测试运行器之后将无限期挂起。

我使用的命令是 mocha "./unitTests/**/*.js"

有没有办法强制关闭测试运行程序?

或者有没有办法确定代码是否在测试环境中运行,以便我可以禁用我的 setInterval(...) 调用?

示例代码:

// MODULE TO TEST
setInterval(function(){
// do cleanup task
}, 1000000);

function testFunction(){
return "val";
}

export {
testFunction
}

// TEST MODULE
describe("Test setInterval", function() {
it("should finish", function() {
testFunction().should.be.equal("val");

// This test will complete and all others, but the entire suite will not
});
});

最佳答案

根本原因是当 Node 认为进程“完成”时,Mocha 默认 认为套件“完成”。并且 默认情况下 Node 在调用进程“完成”之前等待所有未清除的超时和间隔“完成”。 (“未清除”超时或间隔是已创建且从未调用过 clearTimeout/clearInterval 的超时或间隔。)

当您传递给 setTimeout 的回调已完成执行时完成超时,但永远不会完成间隔,因为根据设计它会永远调用其回调。

您的选择是:

  1. 确定应清除间隔的条件,并使用 clearInterval 清除它。

  2. 使用 unref setInterval 的返回值。这告诉 Node 在决定进程是否“完成”时忽略间隔。

  3. 使用 --exit 选项(在 Mocha 4 中引入)调用 mocha,当 Mocha 完成测试套件时强制退出进程。

我会使用选项 1 或 2。第三个选项有效,但如果您的测试套件变得更加复杂,它可能会隐藏您应该注意的问题。如果有更集中的解决方案可以使用,我不会使用它。

关于javascript - Mocha 测试套件在 setInterval(...) 运行时永远不会结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48172363/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com