Mochaを使用してNode.jsアプリケーションのテストケースを書いています。テストケースには、追加の入力オプションまたはパラメーターとしてAPIキーが必要です。 APIキーはプライベートなので、誰でもGitHubで見ることができるので、テストファイルに直接含めたくありません。 Mochaには次のオプションがあります。
しかし、テスターがテスト用の独自のAPIキーをコマンドラインで指定できるようにするパラメーターを含めることは可能ですか?といった:
./node_modules/mocha/bin/mocha test/*.js --key YOUR_KEY
Mocha自体がテストに追加のパラメーターを渡すことをサポートしているとは思いませんが、環境変数を使用できます。
env KEY=YOUR_KEY mocha test/*.js # assumes some sort of Unix-type OS.
テストファイルでそれらを読み取ります。
var key = process.env.KEY;
Substackの optimist モジュールとflatironの nconf を見てください。私のテストの多くは外部パラメーターに依存しており、optimistおよびnconfモジュールにより、jsonファイルから構成オプションを簡単にロードできます。
テストコマンドで、パスをconfig.jsonファイルに渡します
mocha test/api-test.js --config=/path/to/config.json --reporter spec
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
{
"api": {
"key": "fooKey",
"Host": "example.com",
"port": 9000
}
}
最近使用した別のパターンは、 config モジュールです。定期的に実行する場合は./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を設定する簡単な方法は、メイクファイルを使用してテストを実行することです。すべてのテストを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
このスレッドで説明したprocess.argv [index]メソッドに似たパラメーターを渡す最も簡単な方法の1つは、npm構成変数を使用することです。これにより、変数名をもう少し明確に見ることができます。
テストコマンド:
npm --somevariable=myvalue run mytest
package.json:
"scripts": {
"mytest": "mocha ./test.js" }
test.js
console.log(process.env.npm_config_somevariable) // should evaluate to "myvalue"
Mochaでこれを行う方法はサポートされていません。推奨される方法は、ファイル(たとえばconfig.json)を使用し、それを必要とし、他の人が変更できるようにすることです。
つまり、コマンドラインの最後(テストするファイルの後)でキーを渡して使用する場合-process.argvを使用して使用できるはずです(使用しない場合-または通常のファイルの後ではありません)名前、その後モカは失敗します)。
./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();
})
})
テストに合格する必要があります
他の答えは、テストスイートを実行する前のコード実行をサポートしないという点で制限されています。パラメータの受け渡しのみをサポートします。
この回答は、テストスイートが実行される前にコード実行をサポートし、mochaによって完全に文書化されます
mocha docs: 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');
完了!
サーバーのコードbootstrapは、テストおよびサーバー実行の前に実行されます(npm startおよびnpm test)
テストbootstrapのコードは、テストの前にのみ実行されます(npmテスト)
これを@damianfabianに感謝します- ユニットテストの実行でグローバル変数を初期化する方法? を参照してください
'minimist'モジュールを使用してmochaテストスクリプトに引数を渡すことができます。 npm install minimist
でインストール
ターミナル:
mocha test.js --config=VALUE
Mochaノードスクリプト:
var argv = require('minimist')(process.argv.slice(2));
console.log('config', argv.config);
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;
コマンドライン引数を含むprocess.argvを使用した簡単な方法
$ mocha -w test/*.js --KEY=YOUR_KEY
後で、コードでYOUR_KEYを取得できます。
let LAST_PARAM = process.argv[process.argv.length-1]
let PARAM_NAME = LAST_PARAM.split("=")[0].replace("--","")
let PARAM_VALUE = LAST_PARAM.split("=")[1]
console.log("KEY: ", PARAM_VALUE)
すべてのprocess.argvを表示するには
process.argv.forEach((value, index) => {
console.log(`process.argv[${index}]: ${value}`);
})
出力
$ mocha -w test/*.js --KEY=YOUR_KEY
KEY: YOUR_KEY
process.argv[0]: /usr/local/bin/node
process.argv[1]: /Users/pabloin/.npm-packages/lib/node_modules/mocha/bin/_mocha
process.argv[2]: -w
process.argv[3]: test/tt.js
process.argv[4]: test/tt2.js
process.argv[5]: --KEY=YOUR_KEY
KEY: YOUR_KEY
process.argv[0]: /usr/local/bin/node
process.argv[1]: /Users/pabloin/.npm-packages/lib/node_modules/mocha/bin/_mocha
process.argv[2]: -w
process.argv[3]: test/tt.js
process.argv[4]: test/tt2.js
process.argv[5]: --KEY=YOUR_KEY
私はかなりの数の答えを読んでいますが、それらのほとんどは実際の解決策よりも複雑です。
config.yml
またはconfig.json
があるとします。私の場合、それはYAMLファイルです。
まず、yamljs
依存関係をインストールします。 load
という関数があります。
基本的に私がやること:
const YAML = require('yamljs'); const ymlConfig = YAML.load('./config.yml');
それから私は行きます:
process.env.setting1 = ymlConfig.setting1; process.env.setting2 = ymlConfig.setting2;
そしてもちろん-これはすべてテストファイルで行われます。
mochaサイドバー(VS Code拡張)を使用してデバッグ/テストする場合は、次のように入力します。
{
"mocha.env": {
"KEY": "YOUR_KEY",
"MY_VARIABLE": "MY VALUE"
}
}
.vscode/settings.json
で