首页 > 解决方案 > 如何设置 mocha 先运行单元测试,然后启动服务器并运行集成测试

问题描述

我有需要使用一个“npm run mocha”命令运行的单元测试和集成测试。我的集成测试之前的套件已设置并与 mocha.opts 正常工作,包括之前的步骤,如下所示:

test/beforeTests.js (sets up some important variables)
test/*.x.js (bulk of the tests, all the files ending in .x.js are run)

包含我的集成测试时,单元测试失败,因为正在运行的服务器与一些存根函数发生冲突。因此我想先运行单元测试,然后启动服务器,运行集成测试并关闭服务器。我通过将 mocha.opts 更改为:

test/beforeTests.js (sets up some important variables)
test/*.x.js (bulk of the tests, all the files ending in .x.js are run)
test/startServer.js (start the server)
test/integration/*.x.js (run integration tests)
test/afterTests.js (close the server)

beforeTests.js:

before(function(done) { 
 // do something 
});

startServer.js:

before(function() {
 return runServer()
});

beforeTests 和 startServer 都可以工作,但是它们都在测试开始时执行,而不是

beforeTest > do unit tests > start server > do integration tests > stop server

我无法将集成测试合并到一个文件中,或者单元测试太多了。有没有办法设置 mocha.opts 做我想做的事。我环顾四周,没有什么真正适合我想做的事情。

标签: node.jsunit-testingservermocha.jsintegration-testing

解决方案


我之前为此使用的一种技术是将两个 npm 命令用于单元和集成测试,然后如果我想在单次执行中运行它们,则将它们组合到一个 npm 命令中。

"test": "npm run test:unit && npm run test:integration"
"test:unit": "mocha test/unit",
"test:integration": "mocha test/integration"

您可以启动服务器作为integration测试的一部分。

我建议使用testfornpm test而不是mochafornpm run mocha因为它是节点项目中更标准的测试命令名称。

希望能帮助到你


推荐阅读