Javascript node.js在测试中设置process.env变量

Javascript node.js在测试中设置process.env变量,javascript,node.js,mocha.js,Javascript,Node.js,Mocha.js,当我使用mocha在node.js中运行测试时,如何设置临时环境变量 在模块中,我有一个取决于环境变量的变量 var myVariable = proccess.env.ENV_VAR; 现在我使用模块 存在一种更简单的方式吗?没有重新布线模块 在您的myModule.js文件中,导出一个将变量作为参数的函数,例如: module.exports = function (var) { // return what you were exporting before }; 那么当你需要

当我使用mocha在node.js中运行测试时,如何设置临时环境变量

在模块中,我有一个取决于环境变量的变量

var myVariable = proccess.env.ENV_VAR;
现在我使用模块


存在一种更简单的方式吗?没有重新布线模块

在您的
myModule.js
文件中,导出一个将变量作为参数的函数,例如:

module.exports = function (var) {
    // return what you were exporting before
};
那么当你需要它时,就这样要求它:

var myModule = require('../myModule')(process.env.ENV_VAR);

我的第一反应是在任何require语句之前将env var设置在test.js的顶部。但是,如果您有一个依赖于env var的模块,并且在同一测试运行中多次需要它,那么这可能不适用于您。假设您有一个名为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
,新文件将首先在您的套件中运行,并且mode.mode对于所有后续的测试js文件将是未定义的。
require
命令实际上不会多次重新加载同一模块

假设您不能在测试中使用dotenv包。如果是这样,您可以在mocha配置文件中以编程方式设置process.env上的值。默认情况下,这可以在.mocharc.json或.mocha.yml中找到,但可以轻松地转换为.mocharc.js。此处参考示例js文件:

所以你的.mocharc.js可能是

"use strict";

process.env.ENV_VAR = "UNIT_TEST_MODE";
// end of .mocharc.js
而ENV_VAR将在mocha需要或运行任何模块之前设置。 即使您使用的是dotenv,您也可以选择从您的mochajs配置中翻转set other dotenv选项,您可能不希望在本地dev服务器的.env文件中设置该选项。这样,您的.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/_mochadotenv_config_path=/full/custom/path/to/.env.mocha

"use strict";

require('dotenv').config({ debug: process.env.DEBUG, { path: '/full/custom/path/to/.env.mocha' } })`.
// end of .mocharc.js