92

Mocha を使用して Node.js アプリケーションのテスト ケースを作成しています。テスト ケースには、追加の入力オプションまたはパラメーターとして API キーが必要です。API キーは非公開なので、誰でも GitHub で確認できるため、テスト ファイルに直接含めたくありません。Mocha で使用できるオプションがいくつかあることは知っています。

http://mochajs.org/#usage

しかし、テスト担当者がコマンドラインでテスト用に独自の API キーを指定できるように、いくつかのパラメーターを含めることは可能ですか? そのような:

./node_modules/mocha/bin/mocha test/*.js --key YOUR_KEY
4

10 に答える 10

91

Mocha 自体が追加のパラメーターをテストに渡すことをサポートしているとは思いませんが、環境変数を使用できます。

env KEY=YOUR_KEY mocha test/*.js # assumes some sort of Unix-type OS.

そして、テストファイルでそれらを読み取ります:

var key = process.env.KEY;
于 2013-04-22T10:36:51.407 に答える
32

このスレッドで言及されている process.argv[index] メソッドと同様のパラメーターを渡す最も簡単な方法の 1 つは、npm 構成変数を使用することです。これにより、変数名をもう少し明確に見ることができます。

テスト コマンド:

npm --somevariable=myvalue run mytest

パッケージ.json:

"scripts": {
"mytest": "mocha ./test.js" }

test.js

console.log(process.env.npm_config_somevariable) // should evaluate to "myvalue"
于 2016-01-23T00:12:17.580 に答える
31

Substack によるoptimistモジュールとflatironの nconf を見てください。私のテストの多くは外部パラメーターに依存しており、optimist モジュールと nconf モジュールを使用すると、json ファイルから構成オプションを簡単にロードできます。

テスト コマンドで config.json ファイルへのパスを渡します

テスト コマンド

mocha test/api-test.js --config=/path/to/config.json --reporter spec

api-test.js

var path = require('path')
var fs = require('fs')
var assert = require('assert')
var argv = require('optimist').demand('config').argv
var configFilePath = argv.config
assert.ok(fs.existsSync(configFilePath), 'config file not found at path: ' + configFilePath)
var config = require('nconf').env().argv().file({file: configFilePath})
var apiConfig = config.get('api')
var apiKey = apiConfig.key

config.json

{
  "api": {
    "key": "fooKey",
    "host": "example.com",
    "port": 9000
  }
}

私が最近使用しているもう 1 つのパターンは、構成モジュールです。./config/default.yml定期実行用の./config/test.ymlファイルとテスト用のファイルを指定できます。

テスト スイートを実行するときに NODE_ENV=test をエクスポートすると、構成モジュールが読み込まれます。test.yml

コードでは、構成オブジェクトに簡単にアクセスできます

var config = require('config')

// config now contains your actual configuration values as determined by the process.env.NODE_ENV
var apiKey = config.api.key

NODE_ENV=test を設定する簡単な方法は、makefile を使用してテストを実行することです。経由ですべてのテストを実行しますmake test。単一のテスト実行を実行するにはmake one NAME=test/unit/sample-test.js

サンプルメイクファイル

MOCHA?=node_modules/.bin/mocha
REPORTER?=spec
GROWL?=--growl
FLAGS=$(GROWL) --reporter $(REPORTER) --colors --bail

test:
        @NODE_ENV="test" \
        $(MOCHA) $(shell find test -name "*-test.js") $(FLAGS)

one:
        @NODE_ENV="test" \
        $(MOCHA) $(NAME) $(FLAGS)

unit:
        @NODE_ENV="test" \
        $(MOCHA) $(shell find test/unit -name "*-test.js") $(FLAGS)

integration:
        @NODE_ENV="test" \
        $(MOCHA) $(shell find test/integration -name "*-test.js") $(FLAGS)

acceptance:
        @NODE_ENV="test" \
        $(MOCHA) $(shell find test/acceptance -name "*-test.js") $(FLAGS)

.PHONY: test
于 2013-04-22T15:04:14.450 に答える
27

他の回答は、テスト スイートを実行する前のコード実行をサポートしていないという点で制限されています。パラメータの受け渡しのみをサポートします。

この回答は、テストスイートが実行される前のコード実行をサポートし、mocha によって完全に文書化されています

モカのドキュメント: http://unitjs.com/guide/mocha.html#mocha-opts

./test/mocha.opts を作成します

--recursive
--reporter spec
--require ./server.bootstrap
--require ./test/test.bootstrap

./server.bootstrap.js を作成します

global.appRoot = require('app-root-path');
// any more server init code

./test/test.bootstrap.js を作成します

process.env.NODE_ENV='test';
// any more test specific init code

最後にあなたのserver.jsで:

require('./server.bootstrap');

終わり!

サーバー ブートストラップのコードは、テストおよびサーバーの実行 (npm start および npm test) の前に実行されます。

テスト ブートストラップのコードは、テストの前にのみ実行されます (npm テスト)

これについては @damianfabian に感謝します - 単体テストの実行でグローバル変数を初期化する方法を参照してください。

于 2017-01-26T13:32:51.493 に答える
20

Mocha でこれを行う方法はサポートされていません。推奨される方法は、ファイル (たとえば config.json) を使用し、それを要求し、他の人が変更できるようにすることです。

そうは言っても、コマンドラインの最後(テストするファイルの後)でキーを渡して使用すると、 process.argv を使用して利用できるはずです(使用しない場合、または通常のファイルの後ではありません)名前の場合、mocha は失敗します)。

を実行./node_modules/mocha/bin/mocha --reporter spec test.js --apiKey=someKeyし、test.js にコードが含まれている場合:

var assert = require("assert")
describe("testy", function () {
    it("shouldy", function (done) {
        var value;
        for (var index in process.argv) {
            var str = process.argv[index];
            if (str.indexOf("--apiKey") == 0) {
                value = str.substr(9);
            }
        }
        assert.equal(value,"someKey")
        done();
    })
})

テストに合格する必要があります

于 2013-04-22T10:36:25.830 に答える
16

「minimist」モジュールを使用して、mocha テスト スクリプトに引数を渡すことができます。でインストールnpm install minimist

ターミナル:

mocha test.js --config=VALUE

モカ ノード スクリプト:

var argv = require('minimist')(process.argv.slice(2));
console.log('config', argv.config);
于 2016-02-11T13:07:16.947 に答える
3

mochaStream (require('spawn-mocha-parallel').mochaStream) と考えてパラメーターを送信できます。

お気に入り:

var mochaStream = require('spawn-mocha-parallel').mochaStream;

var mocha = mochaStream({
    env: function(){
        return {yourParam: 'value'}
    }
});

return gulp.src('test/**/*-specs.js', {read: false})
    .pipe(mochaStream)
    .on('error', console.warn.bind(console));

..spec.js ファイル内

var yourParam = process.env.yourParam;
于 2015-01-31T01:07:35.757 に答える