我想在一个循环中以非并行模式重复运行一个摩卡测试。但是看起来测试只在第一次迭代时被添加到摩卡中。日志显示0个已运行的测试。
下面是主文件(需要安装摩卡):
const fs = require('fs')
const path = require('path');
const Mocha = require('mocha');
getFiles = dir => { // returns tests files as an array
const files = []
let resolvedPath = path.resolve(dir);
for (const file of fs.readdirSync(dir)) {
const fullPath = resolvedPath + '/' + file
if (fs.lstatSync(fullPath).isDirectory())
getFiles(fullPath).forEach(x => files.push(file + '/' + x))
else if (file.endsWith('.js')) {
files.push(fullPath)
}
}
return files
}
function delay(time) { // used for sleep within the start function
return new Promise(resolve => setTimeout(resolve, time));
}
async function start(testsPath) {
let testFiles = getFiles(testsPath);
let failedTestsCount = -1;
while(true) {
console.log("starting a new iteration")
let mocha = await new Mocha();
for (let i = 0; i < testFiles.length; i++) {
mocha.addFile(testFiles[i]);
}
mocha.parallelMode(false);
await mocha.run(failed => {
failedTestsCount = failed;
});
console.log("Failed tests: " + failedTestsCount)
await delay(1000*60) // 1 minute
}
}
start('./tests');
还有一个名为tests
的子目录,用于存储测试文件,为了简单起见,它只包含一个文件(需要安装chai):
let expect = require("chai").expect;
describe("Very Simple Tests", async function() {
it("passing", async function() {
expect(true).to.equal(false);
});
it("failing", async function() {
expect(true).to.equal(true);
});
});
我得到了以下输出(仅在第一次迭代时加载测试):
Very Simple Tests
1) passing
✔ failing
1 passing (3ms)
1 failing
1) Very Simple Tests
passing:
AssertionError: expected true to equal false
+ expected - actual
-true
+false
at Context.<anonymous> (tests/tests.js:6:25)
at process.processImmediate (node:internal/timers:476:21)
starting a new iteration
Failed tests: 1
0 passing (0ms)
奇怪的是,在并行模式下,它们运行正常,但在某些情况下,我需要一个连续模式。我尝试了一些配置,但似乎没有帮助。
对于我来说,通过shell脚本和命令行选项运行它们远非最佳选择,因为我需要通过express中的端点使结果可见。
我怎样才能让它在非并行模式下运行?
1条答案
按热度按时间ggazkfy81#
我需要在循环中添加unloadFiles(或dispose):