web-dev-qa-db-ja.com

テスト環境でモカテストを実行しますか?

テスト環境でテストスイートを実行するよう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]

テスト環境でテストを実行できません。助言がありますか?

21
Feech
  1. app.jsが必要になる前に、NODE_ENVを定義する必要があります。

    process.env.NODE_ENV = 'test'
    
    app = require('../../app')
    
    describe 'some test', ->
      it 'should pass', ->
    
  2. 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);
    
36
Vadim Baryshev

私はヴァディムとは違うアプローチを取るでしょう。 Vadimの例を使用すると、代わりにprocess.env.NODE_ENV値に基づいて環境設定をロードできます。私のアプローチには別のステップがあることは知っていますが、それはよりクリーンで拡張可能であり、ロジックにテスト条件を追加できなくなります。

このアプローチでは dotenv を使用し、アプリケーションのルートでdefaulttestの両方の環境ファイルを定義します。これらのファイルを使用すると、JavaScriptを変更せずにアプリケーション内のプロパティを再構成できます。

  1. Dotenvをpackage.jsonファイルのdependencyとして追加し、新しいパッケージをnode_modulesフォルダにインストールします。

    package.json

    {
      ...
      "dependencies": {
        ...
        "dotenv": "0.2.8"
      }
    }
    

    コマンドライン

    $ npm install
    
  2. ロードされた.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);
    
  3. フォルダールートに.env.env.testの2つのファイルを作成します。以下の1行を追加するだけです。これらのファイルには、各行に単純なキーと値のペアがあり、process.env.をプレフィックスとして付けるとアクセスできます。

    。env

    port=3000
    

    。env.test

    port=3002
    
  4. コマンドラインから、またはテストを呼び出すときにNODE_ENVを設定します。

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

NODE_ENVを設定せずに他のすべてのケースでアプリケーションを実行すると、デフォルトの.envファイルの値がprocess.envに読み込まれます。

23
Eat at Joes