如何向Jest CLI传递环境变量?测试脚本设置不生效问题
你这是踩了shell命令里一个很常见的小坑——原来的写法里,IMPORTANT_ENV_VAR=value_that_matters是作为位置参数传给my_test_script.sh脚本的,根本没进到Jest的运行环境里,难怪测试代码读不到它。下面给你几个实用的解决办法:
方法1:在脚本调用前全局设置环境变量
把环境变量放在脚本调用的最前面,这样整个脚本进程(包括它启动的Jest)都会自动继承这个环境变量:
IMPORTANT_ENV_VAR=value_that_matters ./my_test_script.sh ./node_modules/.bin/jest --useStderr ./__tests__/my.test.js
如果你的my_test_script.sh只是负责转发执行命令,那这样改完,测试里直接用process.env.IMPORTANT_ENV_VAR就能拿到值了。
方法2:在脚本内部显式导出环境变量
如果需要通过脚本参数传递环境变量的值,可以修改my_test_script.sh的逻辑,把参数转换成环境变量后再执行Jest:
#!/bin/bash # 提取第一个参数作为环境变量值并导出 export IMPORTANT_ENV_VAR="$1" # 移除第一个参数,剩下的就是Jest的命令和参数 shift # 执行Jest命令 "$@"
调用脚本时就改成:
./my_test_script.sh value_that_matters ./node_modules/.bin/jest --useStderr ./__tests__/my.test.js
方法3:直接在Jest命令前绑定环境变量
如果脚本的核心逻辑就是运行Jest,也可以直接在脚本里的Jest命令前加上环境变量设置,这样Jest进程会直接获取到这个变量:
#!/bin/bash # 脚本内部直接设置环境变量并启动Jest IMPORTANT_ENV_VAR=value_that_matters ./node_modules/.bin/jest --useStderr ./__tests__/my.test.js
这种方式最直接,适合脚本逻辑简单的场景。
额外提示:跨平台场景用cross-env
如果你需要在Windows和Linux/macOS上都能顺畅运行这个脚本,可以用cross-env包来统一环境变量的设置方式:
先安装依赖:
npm install --save-dev cross-env
然后修改命令(不管是写在脚本里还是直接调用):
npx cross-env IMPORTANT_ENV_VAR=value_that_matters jest --useStderr ./__tests__/my.test.js
最后别忘了确认测试代码里是用process.env.IMPORTANT_ENV_VAR来读取变量的,拼写和大小写可别搞错了~
内容的提问来源于stack exchange,提问作者Kris Randall
相关产品推荐
相关产品推荐

