当我使用mocha在node.js中运行测试时,我如何设置时态环境变量?
在模块中,我有一个变量,取决于环境变量
var myVariable = proccess.env.ENV_VAR;
现在我使用rewire模块
var rewire = require('rewire');
var myModule = rewire('../myModule');
myModule.__set__('myVariable', 'someValue');
存在一种更简单的方法吗?没有重新布线模块?
答案 0 :(得分:1)
在myModule.js
文件中,导出一个将变量作为参数的函数,例如:
module.exports = function (var) {
// return what you were exporting before
};
然后当你需要它时,需要它:
var myModule = require('../myModule')(process.env.ENV_VAR);
答案 1 :(得分:0)
我的第一个直觉是在任何require语句之前简单地将env var设置在test.js的顶部。但是,如果您有一个依赖于环境变量的模块,那么这可能对您不起作用,并且在同一测试运行中需要多次。说您有一个名为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配置文件中以编程方式在process.env上设置值。默认情况下,该文件位于.mocharc.json或.mocha.yml中,但可以轻松将其转换为.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文件中进行设置。这样,您的.env.mocha var变量将可用于不需要dotenv的各个模块。
"use strict";
require('dotenv').config({ debug: process.env.DEBUG, { path: '/full/custom/path/to/.env.mocha' } })`.
// end of .mocharc.js
尽管在第二种情况下,您最好将package.json中的dotenv env路径设置为test命令的一部分:
node -r dotenv/config /node_modules/mocha/bin/_mocha dotenv_config_path=/full/custom/path/to/.env.mocha