我写测试用例使用摩卡我的Node.js应用程式。 测试用例需要一个API密钥作为一个额外的输入选项或参数。 API密钥是私有的,所以我不希望直接将其包含在测试文件,然后大家可以看到它在GitHub上。 我知道有对摩卡提供一些选项在:
http://mochajs.org/#usage
但是,它可能包括一些参数,让测试人员指定的命令行测试自己的API密钥? 如:
./node_modules/mocha/bin/mocha test/*.js --key YOUR_KEY
我写测试用例使用摩卡我的Node.js应用程式。 测试用例需要一个API密钥作为一个额外的输入选项或参数。 API密钥是私有的,所以我不希望直接将其包含在测试文件,然后大家可以看到它在GitHub上。 我知道有对摩卡提供一些选项在:
http://mochajs.org/#usage
但是,它可能包括一些参数,让测试人员指定的命令行测试自己的API密钥? 如:
./node_modules/mocha/bin/mocha test/*.js --key YOUR_KEY
我不认为摩卡本身支持传递参数获取到你的测试,但你可以使用环境变量:
env KEY=YOUR_KEY mocha test/*.js # assumes some sort of Unix-type OS.
而在测试文件阅读:
var key = process.env.KEY;
看看在乐观的亚组模块和nconf中的烙铁。 很多我的测试依赖于外部参数和乐观主义者,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/default.yml
定期运行文件和./config/test.yml
的测试文件。
当运行测试套件,出口NODE_ENV =测试和配置模块将加载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 =测试是用一个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
有没有办法支持与摩卡做到这一点。 建议的方法是使用一个文件(例如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();
})
})
测试应该通过
之一的传递类似于在该线程中提到process.argv [索引]方法参数最简单的方法是使用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"
其他答案是有限的,他们不支持代码执行前运行测试套件。 他们只支持传递参数。
之前执行测试套件和摩卡是完全记录这个答案支持执行代码
摩卡文档: 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');
DONE!
在服务器引导代码将被测试之前和服务器执行的执行(NPM启动和NPM试验)
在测试中自举代码将只在测试之前执行(NPM试验)
由于@damianfabian这一个-看如何初始化在单元测试运行的全局变量?
你可以通过使用“minimist”模块的参数咖啡色测试脚本。 与安装npm install minimist
终奌站:
mocha test.js --config=VALUE
摩卡节点脚本:
var argv = require('minimist')(process.argv.slice(2));
console.log('config', argv.config);
我可以把参数认为mochaStream(要求(“重生 - 摩卡水货”)。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;
当然 - 这是所有在您的测试文件中完成的。