Мокко тесты с дополнительными опциями или параметрами
Я пишу тесты для моего узла.JS приложение с использованием Мокко. Тестовые случаи требуют ключ API в качестве дополнительного параметра ввода или параметра. Ключ API является частным, поэтому я не хочу включать его непосредственно в тестовые файлы, так как все могут видеть его на GitHub. Я знаю, что есть несколько вариантов, доступных для Мокко по адресу:
но можно ли включить некоторые параметры, чтобы тестеры указывали свой собственный ключ API для теста в командная строка? Например:
./node_modules/mocha/bin/mocha test/*.js --key YOUR_KEY
9 ответов:
Я не думаю, что Mocha сам поддерживает передачу дополнительных параметров в ваши тесты, но вы можете использовать переменные среды:
env KEY=YOUR_KEY mocha test/*.js # assumes some sort of Unix-type OS.и читать их в тестовых файлах:
var key = process.env.KEY;
нет никакого поддерживаемого способа сделать это с Мокко. предлагаемый способ-использовать файл (например, 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