テスト環境でテストスイートを実行するようmochaに指示できないようです。
app.js
app.configure('test', function(){
app.set('port', 3002);
});
test/some-test.coffee
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_ENVを定義する必要があります。
process.env.NODE_ENV = 'test'
app = require('../../app')
describe 'some test', ->
it 'should pass', ->
app.set
でリスニングポートを変更することはできません。ポートを設定する方法は1つだけです-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
値に基づいて環境設定をロードできます。私のアプローチには別のステップがあることは知っていますが、それはよりクリーンで拡張可能であり、ロジックにテスト条件を追加できなくなります。
このアプローチでは dotenv を使用し、アプリケーションのルートでdefault
とtest
の両方の環境ファイルを定義します。これらのファイルを使用すると、JavaScriptを変更せずにアプリケーション内のプロパティを再構成できます。
Dotenvをpackage.json
ファイルのdependency
として追加し、新しいパッケージをnode_modules
フォルダにインストールします。
package.json
{
...
"dependencies": {
...
"dotenv": "0.2.8"
}
}
コマンドライン
$ npm install
ロードされた.envファイルから設定された環境値をポートが使用するように、app.js
を変更します。
// 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
の2つのファイルを作成します。以下の1行を追加するだけです。これらのファイルには、各行に単純なキーと値のペアがあり、process.env.
をプレフィックスとして付けるとアクセスできます。
。env
port=3000
。env.test
port=3002
コマンドラインから、またはテストを呼び出すときにNODE_ENV
を設定します。
$ NODE_ENV=test mocha <TEST_FOLDER>/*.js
---------^
NODE_ENV
を設定せずに他のすべてのケースでアプリケーションを実行すると、デフォルトの.env
ファイルの値がprocess.env
に読み込まれます。