当我用mocha在node.js中运行测试时,我如何设置时间环境变量?
在模块中,我有一个变量取决于环境变量var myVariable = proccess.env.ENV_VAR;
现在我使用rewire模块,
var rewire = require('rewire');
var myModule = rewire('../myModule');
myModule.__set__('myVariable', 'someValue');
存在更简单的方法吗?没有重接线模块?
在您的myModule.js
文件中,导出一个以变量作为参数的函数,例如:
module.exports = function (var) {
// return what you were exporting before
};
当你需要它的时候,像这样要求:
var myModule = require('../myModule')(process.env.ENV_VAR);
我的第一反应是简单地在test.js的顶部设置env变量,然后再执行任何require语句。但是,如果您有一个依赖于env变量的模块,并且在相同的测试运行中多次需要它,那么这可能不适合您。假设你有一个依赖于env的模块,名为mode.js:
module.exports = {
MODE : process.env.ENV_VAR
};
如果用
添加一个名为bTest.js
的测试文件process.env.ENV_VAR= "UNIT_TEST_MODE"
const mode = require('./mode.js')
// describe some tests scenarios that use mode.MODE
...
你会好的。但是如果您添加第二个测试文件
const mode = require('./mode.js')
// describe some more tests scenarios that use mode.MODE
...
并命名为aTest.js
,新文件将首先在您的套件和模式下运行。对于所有后续的测试js文件,MODE都是未定义的。require
命令实际上不会多次重新加载相同的模块。
让我们假设您不能在测试中使用dotenv包。如果是,您可以在进程上设置值。在mocha配置文件中以编程方式Env。默认情况下,它在.mocharc中找到。Json或.mocha。但这可以很容易地转换为.mocharc.js。参考这里的示例js文件:https://github.com/mochajs/mocha/blob/master/example/config/.mocharc.js
所以你的。mocharc。js可以是"use strict";
process.env.ENV_VAR = "UNIT_TEST_MODE";
// end of .mocharc.js
和ENV_VAR将在mocha需要或运行任何模块之前设置。即使你正在使用dotenv,你也可以选择从mochajs配置中翻转设置其他dotenv选项,你可能不想在本地开发服务器的。env文件中设置。那样的话,你的。嫉妒。Mocha变量将可用于不需要dotenv的单个模块。
"use strict";
require('dotenv').config({ debug: process.env.DEBUG, { path: '/full/custom/path/to/.env.mocha' } })`.
// end of .mocharc.js
虽然在第二种情况下,你可能会更好地设置dotenv env路径作为你的package.json中的测试命令的一部分:node -r dotenv/config /node_modules/mocha/bin/_mocha dotenv_config_path=/full/custom/path/to/.env.mocha