我正在开发一个使用 process.env.APP_ENV
中的值的项目,以便为当前环境选择合适的配置文件:
import prodParams from './production';
import stgParams from './staging';
import devParams from './development';
let params = devParams;
switch (process.env.APP_ENV) {
case 'production':
params = prodParams;
break;
case 'staging':
params = stgParams;
break;
default:
params = devParams;
}
export default params;
我正在尝试使用以下代码对此进行测试(尚未使用断言):
import params from '../../../parameters';
...
it.only('should return the appropriate config ', (done) => {
process.env.APP_ENV = 'production';
console.log(params);
done();
});
但是,当我如上所示设置环境变量 process.env.APP_ENV
时,它仍然以未定义的方式到达模块,因此它始终返回开发配置而不是生产环境。
抛开测试部分,功能运行良好,但无论如何我都想测试它。
关于如何解决这个问题有什么建议吗?
最佳答案
import
语句在任何其他代码之前执行,因此您无法使用 import
来完成此操作。
如果您在设置环境变量之后需要参数文件,您可以在某种程度上使其与require
一起工作:
process.env.APP_ENV = 'production';
let params = require('../../../parameters').default;
...
但是,这仍然不是很好,因为它只能工作一次,因为 require
维护着缓存(后续测试将 APP_ENV
设置为不同的值不起作用)。
解决方法是让 parameters.js
导出您要调用的函数:
// parameters.js
export default function() {
let params = devParams;
switch (process.env.APP_ENV) {
...
}
return params;
}
// test.js
import getParams from '../../../parameters';
...
process.env.APP_ENV = 'production';
let params = getParams();
或者在外部设置APP_ENV
:
$ env APP_ENV='production' mocha ...
关于javascript - 使用 mocha 测试依赖于环境变量 process.env.APP_ENV 的配置模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39587672/