我有一些 AVA 测试,我试图多次运行,但在不同的模拟上。例如,我想运行相同的 5 个测试,但要确保这些测试适用于各种结构化数据。我设计了一种将模拟导入测试文件的方法,并将它们与它们应该如何解析进行比较,类似于以下内容:
import test from 'ava';
import * as fs from 'fs';
let mockSampleEmail;
let mockDecomposedEmail;
function readJsonFile(fname) {
return JSON.parse(fs.readFileSync(fname).toString());
}
fs.readdir('pre', (err, files) => {
files.forEach(file => {
if (!file.match(/\.json$/)) {
return null;
}
mockSampleEmail = readJsonFile("pre/" + file);
mockDecomposedEmail = readJsonFile("post/" + file);
runEmailDecomposerTests(mockSampleEmail, mockDecomposedEmail, mockRiskyUpdates, file);
})
})
runEmailDecomposerTests 函数如下所示:
const runEmailDecomposerTests = (mockSampleEmail, mockDecomposedEmail, mockRiskyUpdates, fname) => {
test(`(${fname}) Converts the email message received from the websocket into a simple email object`, t => {
//Assertions here
})
}
我的目录结构如下所示:
test/
--emails/
----emailDecomposer.spec.js
----pre/
------sampleEmail.json
----post/
------sampleEmail.json
这一切都在我的 Mac 上本地运行,但是当我将它推送到我们的 jenkins 服务器以测试持续集成时,它失败并出现错误:
✖ No tests found in test/emails/emailDecomposer.spec.js
即使我可以确认 runEmailDecomposerTests 函数肯定被调用了。令人困惑的部分是它在我的 Mac 上本地传递。jenkins 服务器是一个 Linux 虚拟机,所以这就是我倾向于 mac/linux 问题的原因,但我不能确定。更进一步,大约五分之一的它通过我们的 CI 服务器,所以它可能是某种竞争条件?