在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议么?
-
在需要
app.js
之前,您需要定义NODE_ENV:process.env.NODE_ENV = 'test' app = require('../../app') describe 'some test', -> it 'should pass', ->
-
你不能通过
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。
-
在你的
package.json
文件中添加dotenv作为dependency
,然后将新的软件包安装到你的node_modules
文件夹中:的package.json
{ ... "dependencies": { ... "dotenv": "0.2.8" } }
命令行
$ npm install
-
更改您的
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);
-
在文件夹根目录
.env
&.env.test
创build两个文件,只需在下面添加一行即可。 这些文件在每行上都有简单的键值对,当以process.env.
为前缀时可以访问它们process.env.
。.ENV
port=3000
.env.test
port=3002
-
从命令行或者当你调用你的testing时,我会设置
NODE_ENV
:$ NODE_ENV=test mocha <TEST_FOLDER>/*.js ---------^
当您在没有设置NODE_ENV
情况下运行应用程序时,默认.env
文件中的值将被加载到process.env
。