如何在单个npmtesting命令中运行mochatesting和节点? (CI)

我想用Circle CI来集成一个git项目。

我正在使用mocha进行testing。

我想做的事?

运行npm test我想:

  • 我的节点服务器启动
  • 我的testing文件运行

我怎样才能运行一个npm test命令来运行节点和我已经包装在一个index.js文件中的mochatesting。

我已经在我的package.json试过了:

  "scripts": { "test": "node server/app.js & mocha server/tests/index.js", "start": "node server/app.js", "postinstall": "bower install" } 

以上的问题

  • 我的服务器需要一些时间才能启动,并且testing失败,因为它们在服务器启动之前运行

有一个标准的方式来运行一个服务器和单一命令的testing,但我错过了什么?

我认为关键是在testing中运行节点服务器,而不是在另一个进程中初始化它。

您的摩卡testing应该以对您的应用程序的要求开始,然后您的每个testing都可以与其进行交互。

例如:

 var http = require('http'); var server = http.createServer(function(req, res){ res.end('Hello World\n'); }) server.listen(8888); describe('http', function(){ it('should provide an example', function(done){ http.get({ path: '/', port: 8888 }, function(res){ expect(res).to.have.property('statusCode', 200); done(); }) }) }) 

在运行需要某些先决条件的testing时,我所做的是使用mochas beforeEach()function。

从文档

您也可以select任何文件并添加“root”级别的挂钩。 例如,在所有describe()块之外添加beforeEach()。 这将导致callbackbeforeEach()在任何testing用例之前运行,而不pipe它存在于哪个文件中(这是因为Mocha有一个隐含的describe()块,称为“root套件”)。

 beforeEach(function() { console.log('before every test in every file'); }); 

在每个代码块之前,您可以运行命令来启动服务器,例如使用npm的exec库

https://www.npmjs.com/package/exec

这将确保您的服务器在您的testing运行之前运行,使您可以简单地运行npmtesting。

如果在你的情况下可能,我会build议使用supertest这样的testing。 这样,您可以避免在开始testing之前启动服务器。

我知道有些情况下使用supertest是不可能的。 在这种情况下,您可以在所有testingbefore钩子之前轮询您的服务器,直到它准备就绪:

 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应该是什么。 这可能是一个尝试从您的服务器得到一个简单的path,如发出一个GETpath/