node.js在test中设置process.env变量

时间:2015-06-01 23:51:22

标签: javascript node.js mocha

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

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

var myVariable = proccess.env.ENV_VAR;

现在我使用rewire模块

var rewire = require('rewire');
var myModule = rewire('../myModule');

myModule.__set__('myVariable', 'someValue');

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

2 个答案:

答案 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