23

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

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

4

3 に答える 3

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

    process.env.NODE_ENV = 'test'
    
    app = require('../../app')
    
    describe 'some test', ->
      it 'should pass', ->
    
  2. でリスニングポートを変更することはできません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);
    
于 2012-09-02T17:37:46.037 に答える
27

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

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

  1. dotenvをファイルに追加してからdependencypackage.json新しいパッケージをnode_modulesフォルダーにインストールします。

    package.json

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

    コマンドライン

    $ npm install
    
  2. 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);
    
  3. フォルダルートに2つのファイルを作成し、.env.env.test、下に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ます。

于 2014-05-29T17:36:41.983 に答える
0

npm install --save-dev cross-env

cross-env NODE_ENV=testpackage.jsonのスクリプトブロックを追加します

package.json

  "scripts": {
    "test-unit": "cross-env NODE_ENV=test mocha src/**/*.unittest.js --colors",
  },
于 2020-07-18T16:33:44.667 に答える