我似乎无法告诉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
您需要在需要之前定义NODE_ENV app.js
:
process.env.NODE_ENV = 'test'
app = require('../../app')
describe 'some test', ->
it 'should pass', ->
Run Code Online (Sandbox Code Playgroud)你无法改变监听端口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 default
和test
环境文件.这些文件允许您在不更改JavaScript的情况下重新配置应用程序中的属性.
dependency
在package.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)更改您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)在您的文件夹根目录中创建两个文件,.env
&.env.test
只需添加下面的一行.这些文件在每行上都有简单的键值对,可以在前缀时访问process.env.
.
.ENV
port=3000
Run Code Online (Sandbox Code Playgroud)
.env.test
port=3002
Run Code Online (Sandbox Code Playgroud)从命令行或当您调用测试时,我会设置NODE_ENV
:
$ NODE_ENV=test mocha <TEST_FOLDER>/*.js
---------^
Run Code Online (Sandbox Code Playgroud)在没有设置的情况下在所有其他情况下运行应用程序时,将加载NODE_ENV
默认.env
文件中的值process.env
.