【问题标题】:How to send environment variables to Jest CLI?如何将环境变量发送到 Jest CLI?
【发布时间】:2018-10-03 00:19:13
【问题描述】:
我有一个为我运行 Jest 测试的脚本,我想在运行它之前设置一个环境变量,如下所示:
my_test_script.sh
IMPORTANT_ENV_VAR=value_that_matters
./node_modules/.bin/jest --useStderr ./__tests__/my.test.js
但是,当我像这样运行我的测试时,在“my.test.js”中没有设置IMPORTANT_ENV_VAR。
如何将环境变量传递到 Jest CLI 中?
【问题讨论】:
标签:
javascript
unit-testing
continuous-integration
jestjs
【解决方案1】:
哎呀!
不是开玩笑的问题,我只需要在 shell 脚本中 export :
export IMPORTANT_ENV_VAR=value_that_matters
./node_modules/.bin/jest --useStderr ./__tests__/my.test.js
【解决方案2】:
如果您使用的是 npm,您可以将其添加到您的 package.json 以在测试环境中定义环境变量。
"jest": {
"globals": {
"ENVVAR1": true,
"ENVVAR2": "value"
}
}
【解决方案3】:
因为很难在 npm/package.json 下以独立于平台的方式设置环境变量,并且因为 jest --setupFiles 在使用时不在文档中并且似乎不起作用(24.9 ),jest 确实需要一个 --envVar 选项来支持 package.json 外部的环境覆盖(如开发/生产)。
【解决方案4】:
我为解决问题所做的事情很丑陋,但很有效。
我正在寻找更好的解决方案(只需通过 cli 设置环境变量),找不到。
我创建一个设置环境变量的 js 文件,然后加载该文件并将其传递给 setupFile cli 命令。例如
jest --setupFile=setter.js
setter.js 包含
process.env.A = "B"
所以,在运行每个测试之前,我可以读取 process.env.A 变量。
【解决方案5】:
使用cross-env:
{
"scripts": {
"build": "cross-env NODE_ENV=production webpack --config build/webpack.config.js"
},
"devDependencies": {
"cross-env": "7.0.3",
}
}
其目的正是以跨平台的方式将环境变量传递给npm脚本。