23

我似乎无法告诉 mocha 在测试环境中运行我的测试套件。

应用程序.js

app.configure('test', function(){
  app.set('port', 3002);
});

测试/some-test.coffee

app = require('../../app')

process.env.NODE_ENV = 'test'

describe 'some test', ->
  it 'should pass', ->

由于我需要应用程序,因此当我运行我希望看到的测试时

Express server listening on port 3002

相反,我看到

Express server listening on port 3000

在 app.js 的开发配置块中设置不同的端口号会产生

Express server listening on port [whatever port I set in development block in app.js]

我无法让我的测试在测试环境中运行。有什么建议么?

4

3 回答 3

41
  1. 您需要在需要之前定义 NODE_ENV app.js

    process.env.NODE_ENV = 'test'
    
    app = require('../../app')
    
    describe 'some test', ->
      it 'should pass', ->
    
  2. 您不能通过 更改侦听端口app.set。只有一种方法可以设置端口 - 将其传递给listen方法。你可以这样做:

    var express = require('express');
    var app = express();
    
    app.get('/', function(req, res){
      res.send('hello world');
    });
    
    var port = 3000;
    
    app.configure('test', function(){
      port = 3002;
    });
    
    app.listen(port);
    
于 2012-09-02T17:37:46.037 回答
27

我会采取与 Vadim 不同的方法。使用 Vadim 的示例,您可以改为根据您的process.env.NODE_ENV值加载环境设置。我知道我的方法还有另一个步骤,但它更简洁、可扩展,并且可以防止在您的逻辑中添加测试条件。

这种方法使用dotenv,然后在应用程序的根目录中定义一个default和一个环境文件。test这些文件将允许您在不更改 JavaScript 的情况下重新配置应用程序中的属性。

  1. dependency在您的文件中添加 dotenv 作为 apackage.json然后将新软件包安装到您的node_modules文件夹中:

    包.json

    {
      ...
      "dependencies": {
        ...
        "dotenv": "0.2.8"
      }
    }
    

    命令行

    $ npm install
    
  2. 更改您app.js的端口,以便端口使用从加载的 .env 文件中设置的环境值。

    // Load .env files from root based on the NODE_ENV value
    require('dotenv').load();
    
    var express = require('express');
    var app = express();
    
    app.get('/', function(req, res){
      res.send('hello world');
    });
    
    var port = process.env.port || 3000;
    -----------^
    
    app.listen(port);
    
  3. 在您的文件夹根目录中创建两个文件.env& .env.test,只需在下面添加一行。这些文件在每一行都有简单的键值对,当前缀为process.env..

    .env

    port=3000
    

    .env.test

    port=3002
    
  4. 从命令行或当您调用测试时,我会设置NODE_ENV

    $ NODE_ENV=test mocha <TEST_FOLDER>/*.js
      ---------^
    

当您在所有其他情况下运行应用程序而不进行设置NODE_ENV时,默认.env文件中的值将被加载到process.env.

于 2014-05-29T17:36:41.983 回答
0

npm install --save-dev cross-env

添加cross-env NODE_ENV=testpackage.json 的脚本块

package.json

  "scripts": {
    "test-unit": "cross-env NODE_ENV=test mocha src/**/*.unittest.js --colors",
  },
于 2020-07-18T16:33:44.667 回答