我似乎不能告诉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]
我无法在测试环境中运行测试。有什么建议吗?
-
在需要
app.js
:之前,您需要定义NODE_ENVprocess.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不同的方法。使用Vadim的示例,您可以基于process.env.NODE_ENV
值加载环境设置。我知道我的方法还有另一个步骤,但它更干净、可扩展,并且将防止在逻辑中添加测试条件。
这种方法使用dotenv,然后在应用程序的根目录中定义default
和test
环境文件。这些文件将允许您在不更改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
,只需添加下面的一行即可。这些文件的每一行都有简单的键值对,当前缀为process.env.
时可以访问这些键值对。.env
port=3000
.env.test
port=3002
-
从命令行或当您调用测试时,我会设置
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",
},