在Cypress.io中传递baseUrl参数:如何用变量引用baseUrl?
解决方案
你遇到的问题是执行cd切换目录后,npm的环境变量$npm_package_prodStageUrl未被正确解析,shell直接将其作为字符串传递给Cypress,导致URL格式无效。以下是几种可行的解决方法:
方法1:提前缓存环境变量
修改package.json中的脚本,在切换目录前把变量存入本地shell变量,避免切换后丢失:
"prodStageUrl": "https://[name of my app].io/", "scripts": { "cy:prod:smoke": "BASE_URL=$npm_package_prodStageUrl && cd ./apps/myApp && cypress run --spec './cypress/e2e/smoke/*.cy.ts' --config baseUrl=$BASE_URL" }
方法2:用cross-env跨平台处理环境变量
如果需要兼容Windows、Linux/macOS等多系统,先安装cross-env依赖:
npm install cross-env --save-dev
再修改脚本,用cross-env定义变量并包裹后续命令:
"prodStageUrl": "https://[name of my app].io/", "scripts": { "cy:prod:smoke": "cross-env BASE_URL=$npm_package_prodStageUrl sh -c 'cd ./apps/myApp && cypress run --spec ./cypress/e2e/smoke/*.cy.ts --config baseUrl=$BASE_URL'" }
方法3:在Cypress配置文件中直接读取变量
更简洁的方式是在Cypress配置文件(如cypress.config.ts或cypress.config.js)中直接读取npm环境变量,无需在命令行传递参数:
// cypress.config.ts import { defineConfig } from 'cypress'; export default defineConfig({ e2e: { baseUrl: process.env.npm_package_prodStageUrl, // 其他E2E配置项 } });
之后简化package.json中的脚本:
"prodStageUrl": "https://[name of my app].io/", "scripts": { "cy:prod:smoke": "cd ./apps/myApp && cypress run --spec './cypress/e2e/smoke/*.cy.ts'" }
内容的提问来源于stack exchange,提问作者Jan and RESTless
相关产品推荐
相关产品推荐

