首页 > 解决方案 > 当测试用例需要更多时间时,伊斯坦布尔与 mocha 不生成覆盖率报告

问题描述

我正在使用 .js 测试我的 js 文件mocha。一些测试用例需要时间来解决响应,所以我使用了超时。完整的命令看起来像

伊斯坦布尔封面 _mocha test/sol-verifier.js -- --timeout 300000

问题是,在进行这样的覆盖时,我没有创建覆盖报告,它只成功运行测试用例并停止(不终止)。我该如何解决这个问题?

我的代码在 node.js 中,它不创建任何服务器。

此外,当我删除--timeout标志并注释掉需要更多时间的测试用例时。它工作正常并生成覆盖率报告。

根据我的发现,问题不在--timeout标志中,当有一个测试用例需要比平时更长的时间来解决时,不会生成报告。

标签: node.jsunit-testingistanbul

解决方案


done您可以向您的测试套件函数添加一个参数,并done()在每个测试函数的末尾调用:

it('test expectation', function(done) {
    // test asynchronous code
    // call done() to terminate test and proceed to the next test
    done();
}

或者,尝试使用--exiton 标志运行测试mocha

istanbul cover _mocha --exit test/sol-verifier.js -- --timeout 300000

根据文档

为了避免误报并鼓励更好的测试实践,当 Mocha认为应该运行时,它不会再通过 process.exit()自动杀死自己。

如果在您的测试看起来“完成”之后 mocha 进程仍然存在,那么您的测试已经安排了一些事情发生(异步)并且没有正确地清理自己。你有没有打开一个插座?

提供 --exit 标志以使用 v4 之前的行为。


推荐阅读