在测试环境中运行mocha测试?

Fee*_*ech 20 mocha.js node.js

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

app.js

app.configure('test', function(){
  app.set('port', 3002);
});
Run Code Online (Sandbox Code Playgroud)

测试/ some-test.coffee

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

process.env.NODE_ENV = 'test'

describe 'some test', ->
  it 'should pass', ->
Run Code Online (Sandbox Code Playgroud)

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

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]

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

Vad*_*hev 35

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

    process.env.NODE_ENV = 'test'
    
    app = require('../../app')
    
    describe 'some test', ->
      it 'should pass', ->
    
    Run Code Online (Sandbox Code Playgroud)
  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);
    
    Run Code Online (Sandbox Code Playgroud)


Eat*_*oes 23

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

此方法使用dotenv,然后在应用程序的根目录中定义a defaulttest环境文件.这些文件允许您在不更改JavaScript的情况下重新配置应用程序中的属性.

  1. dependencypackage.json文件中添加dotenv,然后将新软件包安装到您的node_modules文件夹中:

    的package.json

    {
      ...
      "dependencies": {
        ...
        "dotenv": "0.2.8"
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    命令行

    $ npm install
    
    Run Code Online (Sandbox Code Playgroud)
  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);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在您的文件夹根目录中创建两个文件,.env&.env.test只需添加下面的一行.这些文件在每行上都有简单的键值对,可以在前缀时访问process.env..

    .ENV

    port=3000
    
    Run Code Online (Sandbox Code Playgroud)

    .env.test

    port=3002
    
    Run Code Online (Sandbox Code Playgroud)
  4. 从命令行或当您调用测试时,我会设置NODE_ENV:

    $ NODE_ENV=test mocha <TEST_FOLDER>/*.js
      ---------^
    
    Run Code Online (Sandbox Code Playgroud)

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

  • 这不是问题,对于最新版本,请执行require('dotenv')。config({path:`.env。$ {process.env.NODE_ENV}`,silent:true})之类的操作; (3认同)