摩卡测试与额外的选项或参数(Mocha tests with extra options or pa

2019-08-31 18:48发布

我写测试用例使用摩卡我的Node.js应用程式。 测试用例需要一个API密钥作为一个额外的输入选项或参数。 API密钥是私有的,所以我不希望直接将其包含在测试文件,然后大家可以看到它在GitHub上。 我知道有对摩卡提供一些选项在:

http://mochajs.org/#usage

但是,它可能包括一些参数,让测试人员指定的命令行测试自己的API密钥? 如:

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

Answer 1:

我不认为摩卡本身支持传递参数获取到你的测试,但你可以使用环境变量:

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

而在测试文件阅读:

var key = process.env.KEY;


Answer 2:

看看在乐观的亚组模块和nconf中的烙铁。 很多我的测试依赖于外部参数和乐观主义者,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
  }
}

替代

我一直在使用最近另一种模式是配置模块。 您可以指定一个./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

示范的Makefile

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


Answer 3:

有没有办法支持与摩卡做到这一点。 建议的方法是使用一个文件(例如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();
    })
})

测试应该通过



Answer 4:

之一的传递类似于在该线程中提到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"


Answer 5:

其他答案是有限的,他们不支持代码执行前运行测试套件。 他们只支持传递参数。

之前执行测试套件和摩卡是完全记录这个答案支持执行代码

摩卡文档: 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这一个-看如何初始化在单元测试运行的全局变量?



Answer 6:

你可以通过使用“minimist”模块的参数咖啡色测试脚本。 与安装npm install minimist

终奌站:

mocha test.js --config=VALUE

摩卡节点脚本:

var argv = require('minimist')(process.argv.slice(2));
console.log('config', argv.config);


Answer 7:

我可以把参数认为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;


Answer 8:

一个简单的方法,使用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


Answer 9:

我一直在阅读相当一些答案,他们大多更复杂的比实际的解决方案必须是。

比方说,我有config.ymlconfig.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 tests with extra options or parameters
标签: node.js mocha