Мокко тесты с дополнительными опциями или параметрами



Я пишу тесты для моего узла.JS приложение с использованием Мокко. Тестовые случаи требуют ключ API в качестве дополнительного параметра ввода или параметра. Ключ API является частным, поэтому я не хочу включать его непосредственно в тестовые файлы, так как все могут видеть его на GitHub. Я знаю, что есть несколько вариантов, доступных для Мокко по адресу:



http://mochajs.org/#usage



но можно ли включить некоторые параметры, чтобы тестеры указывали свой собственный ключ API для теста в командная строка? Например:



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

9 ответов:

Я не думаю, что Mocha сам поддерживает передачу дополнительных параметров в ваши тесты, но вы можете использовать переменные среды:

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

и читать их в тестовых файлах:

var key = process.env.KEY;

посмотри оптимист модуль Substack и nconf от flatiron. Многие мои тесты зависят от внешних параметров, а модули optimist и nconf позволяют легко загружать параметры конфигурации из файла json

в вашей тестовой команде передайте путь к конфигурации.файл JSON

нет никакого поддерживаемого способа сделать это с Мокко. предлагаемый способ-использовать файл (например, config.json), требуют его, и пусть другие люди изменяют его.

это, как говорится, если вы передаете свой ключ в конце командной строки (после файла для тестирования) и использовать -- он должен быть доступен с помощью процесса.argv (если вы не используете -- или это не после обычного имени файла, то mocha не удастся).

Если вы запустите ./node_modules/mocha/bin/mocha --reporter spec test.js --apiKey=someKey и тест.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();
    })
})

тест должен пройти

один из самых простых способов передать параметры, аналогичные процессу.метод argv[index], упомянутый в этом потоке, использует переменные конфигурации npm. Это позволяет вам видеть имя переменной немного более четко:

командная тест:

npm --somevariable=myvalue run mytest

пакета.json:

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

вы можете передать аргумент в тестовый скрипт mocha с помощью модуля 'minimist'. Установите с помощью npm install minimist

терминала:

mocha test.js --config=VALUE

Мокко узел скрипт:

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

другие ответы ограничены тем, что они не поддерживают выполнение кода до запуска вашего набора тестов. Они поддерживают только передачу параметров.

этот ответ поддерживает выполнение кода до выполнения Вашего набора тестов и полностью документирован mocha

мокко документы:http://unitjs.com/guide/mocha.html#mocha-opts

создать ./тест/мокко.ОПТС

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

создать ./сервер.загрузчик.js

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

создать ./ тест / тест.загрузчик.js

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

наконец-то в вашем сервере.js:

require('./server.bootstrap');

готово!

код в начальной загрузке сервера будет выполнен до тестирования и выполнения сервера (npm start и npm test)

код в тестовой начальной загрузке будет выполняться только до тестирования (npm test)

спасибо @damianfabian за это-см. как инициализировать глобальный переменная в модульных тестовых запусках?

я мог бы отправить параметр thought 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));

внутри ..спекуляция.js file

var yourParam = process.env.yourParam;

простой способ, используя процесс.argv, которые содержат командную строку args

$ 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.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;

и конечно-это все сделано в вашем тестовом файле.

Comments

    Ничего не найдено.