如何在单个npm测试命令中运行mocha测试和节点? (CI)

时间:2016-09-12 09:57:53

标签: node.js express mocha circleci

我想使用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"
   }

以上

的问题
  • 我的服务器需要一些时间才能启动,测试因服务器启动前运行而失败

使用单个命令运行服务器和测试是否有标准方法,但我遗漏了什么?

3 个答案:

答案 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。