运行Cypress测试时,指定.env文件后测试未加载环境变量的原因?
问题原因及解决办法
原因分析
你当前的脚本配置里,dotenv -e .env.local.cypress -- 仅将环境变量注入到了start-server-and-test这个主进程中。而cy:run是由start-server-and-test启动的独立子进程,它不会自动继承主进程的环境变量上下文,所以测试代码无法加载到这些系统级变量。
解决办法
有两种常用的修复方式:
方式一:给cy:run单独配置dotenv
修改test:e2e:local脚本,让开发服务器和Cypress测试进程分别通过dotenv加载指定的环境变量文件:
"dev-server": "nodemon --delay 5ms -e ts,tsx --watch ./src -x ts-node --transpile-only ./src/server", "cy:run": "cypress run", "test:e2e:local": "start-server-and-test 'dotenv -e .env.local.cypress -- dev-server' http://localhost:3000 'dotenv -e .env.local.cypress -- cy:run'"
方式二:将环境变量注入到整个脚本的进程上下文
通过shell命令让整个脚本进程加载环境变量,这样子进程(dev-server和cy:run)都会自动继承:
"dev-server": "nodemon --delay 5ms -e ts,tsx --watch ./src -x ts-node --transpile-only ./src/server", "cy:run": "cypress run", "test:e2e:local": "dotenv -e .env.local.cypress -- sh -c 'start-server-and-test dev-server http://localhost:3000 cy:run'"
内容的提问来源于stack exchange,提问作者grabury
相关产品推荐
相关产品推荐

