Я пишу тестовые примеры для своего приложения Node.js, используя Mocha. Для тестовых случаев требуется ключ API в качестве дополнительной опции ввода или параметра. Ключ API является частным, поэтому я не хочу включать его непосредственно в тестовые файлы, так как каждый сможет увидеть его на GitHub. Я знаю, что для Mocha есть несколько вариантов:
Но можно ли включить некоторые параметры, чтобы позволить тестировщикам указывать свой собственный ключ API для теста в командной строке? Такие как:
./node_modules/mocha/bin/mocha test/*.js --key YOUR_KEY
env KEY1=YOUR_KEY1 KEY2=YOUR_KEY2 mocha test
Взгляните на модуль optimist от Substack и nconf от . Многие мои тесты зависят от внешних параметров, а модули optimist и 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, и модуль конфигурации загрузится
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-файла. Запустите все свои тесты через
make test
. Чтобы запустить один тест, выполнитеmake one NAME=test/unit/sample-test.js
Образец make-файла
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], упомянутому в этом потоке, - это использование переменных конфигурации npm. Это позволит вам более четко увидеть имя переменной:
тестовая команда:
package.json:
"scripts": { "mytest": "mocha ./test.js" }
test.js
console.log(process.env.npm_config_somevariable) // should evaluate to "myvalue"
источник
npm ---somevar=myval --anothervar = anotherVal run mytest
сprocess.env.npm_config_somevar
иprocess.env.npm_config_anothervar
?Другие ответы ограничены тем, что они не поддерживают выполнение кода до запуска вашего набора тестов. Они поддерживают только передачу параметров.
Этот ответ поддерживает выполнение кода ДО того, как будет выполнен ваш набор тестов, и полностью задокументирован mocha
документы мокко: 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');
СДЕЛАННЫЙ!
Код в начальной загрузке сервера будет выполнен до тестирования и выполнения сервера (запуск npm и тест npm)
Код в тестовой начальной загрузке будет выполнен только перед тестированием (тест npm)
Спасибо @damianfabian за это - см. Как инициализировать глобальную переменную при запуске модульного теста?
источник
Нет поддерживаемого способа сделать это с 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(); }) })
тест должен пройти
источник
Вы можете передать аргумент скрипту теста мокко, используя модуль Minimist. Установить с помощью
npm install minimist
Терминал:
Скрипт узла Mocha:
var argv = require('minimist')(process.argv.slice(2)); console.log('config', argv.config);
источник
Простой способ, используя process.argv, содержащий аргументы командной строки
Позже вы можете ввести
YOUR_VALUE
свой код: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_VALUE
вместо--KEY=YOUR_KEY
?Я мог бы отправить параметр мысли 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;
источник
Я читал довольно много ответов, большинство из них более сложные, чем должно быть фактическое решение.
Допустим, у меня есть
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
источник