Sha*_*ane 3 javascript windows unit-testing mocha.js node.js
我有一套测试,其中包含带有setInterval(...)调用的代码。
通过Windows Powershell命令行在Mocha中运行此代码时,将运行所有测试,但此后测试运行程序将无限期挂起。
我正在使用的命令是 mocha "./unitTests/**/*.js"
有没有办法迫使测试运行程序关闭?
Alternatively is there a way to determine that the code is running in a test environment so that I can disable my setInterval(...) calls?
Example code:
// 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完成执行后,将完成超时,但永远不会完成一个间隔,因为从设计上讲,它会永远永久地调用其回调。
您的选择是:
确定清除间隔的条件,然后使用清除间隔clearInterval。
用于unref返回值setInterval。这告诉Node在确定进程是否“完成”时忽略间隔。
mocha使用--exit选项(在Mocha 4中引入)进行调用,当使用测试套件完成Mocha时,该选项将强制退出该过程。
我将使用选项1或2。第三个选项有效,但是如果您的测试套件变得更加复杂,它可能会隐藏您应注意的问题。如果有可以使用的更集中的解决方案,我不会使用它。
| 归档时间: | 
 | 
| 查看次数: | 1004 次 | 
| 最近记录: |