Node.js设置进程.测试中的环境变量

node.js set process.env variable in test

本文关键字:环境变量 测试 进程 js 设置 Node      更新时间:2023-09-26

当我用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