在测试环境中运行mocha测试



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

app.js

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

测试/一些测试。咖啡

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]

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

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

    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);
    

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

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

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

    package.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中。

npm install --save-dev cross-env

在package.json的脚本块上添加cross-env NODE_ENV=test

package.json

  "scripts": {
    "test-unit": "cross-env NODE_ENV=test mocha src/**/*.unittest.js --colors",
  },

最新更新