我想使用Circle CI来集成一个git项目。
我正在使用mocha
进行测试。
运行我需要的npm test
时:
如何运行单个npm test
命令来运行已包含在单个index.js
文件中的节点和我的mocha测试。
我在我的package.json
:
"scripts": {
"test": "node server/app.js & mocha server/tests/index.js",
"start": "node server/app.js",
"postinstall": "bower install"
}
使用单个命令运行服务器和测试是否有标准方法,但我遗漏了什么?
答案 0 :(得分:1)
我认为关键是在测试中运行节点服务器,而不是尝试在另一个进程中初始化它。
您的mocha测试应该从您的应用开始,然后是每个 您的测试可以与之互动。
例如:
myhash = {}
with open('file.txt') as fi:
for line in fi.readlines():
key = line[5:11]
value = line[20:26]
myhash[key] = value
print(myhash)
答案 1 :(得分:0)
如果在您的情况下完全可行,我建议使用supertest之类的东西来进行测试。这样,您就可以避免在开始测试之前启动服务器。
我了解有些情况下无法使用supertest
。在这种情况下,您可以在所有测试之前在before
挂钩中轮询您的服务器,等待它准备就绪:
before(function (done) {
// Set a reasonable timeout for this hook.
this.timeout(5000);
function check() {
if (serverIsReady()) {
done();
return;
}
// The server is no ready, check again in 1/10th of a second.
setTimeout(check, 100);
}
check(); // Start checking.
});
我不确定serverIsReady
在你的情况下应该是什么。这可能是尝试从服务器获取一条简单的路径,例如在路径GET
上发布/
。
答案 2 :(得分:-1)
在运行需要某些先决条件的测试时,我所做的是使用mochas beforeEach()功能。
来自文档
您也可以选择任何文件并添加“root”级别挂钩。例如,在所有describe()块之外添加beforeEach()。这将导致beforeSach()的回调在任何测试用例之前运行,无论它存在于哪个文件中(这是因为Mocha有一个隐含的describe()块,称为“root suite”)。
beforeEach(function() {
console.log('before every test in every file');
});
在每个代码块之前,您可以运行命令来启动服务器 使用例如来自npm的exec库
https://www.npmjs.com/package/exec
这将确保您的服务器在运行测试之前运行,从而允许您只运行npm test。