在testing环境中运行摩卡testing?

我似乎无法告诉摩卡在testing环境中运行我的testing套件。

app.js

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

testing/ some-test.coffee

 app = require('../../app') process.env.NODE_ENV = 'test' describe 'some test', -> it 'should pass', -> 

由于我需要的应用程序,当我运行testing,我期望看到

Express server listening on port 3002

而是我看到了

Express server listening on port 3000

在app.js的开发configuration块中设置不同的端口号

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

我无法让我的testing在testing环境中运行。 有什么build议么?

  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的例子,你可以根据你的process.env.NODE_ENV值来加载环境设置。 我知道我的方法还有另一个步骤,但它更清晰,更易扩展,并且会阻止在逻辑中添加testing条件。

这种方法使用了dotenv ,然后在应用程序的根目录default同时定义一个default和一个test环境文件。 这些文件将允许您在应用程序中重新configuration属性,而无需更改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创build两个文件,只需在下面添加一行即可。 这些文件在每行上都有简单的键值对,当以process.env.为前缀时可以访问它们process.env.

    .ENV

     port=3000 

    .env.test

     port=3002 
  4. 从命令行或者当你调用你的testing时,我会设置NODE_ENV

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

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