在我的应用程序(React基于create-react-app)的源代码中,我使用了如下的env变量:存储在我的.env.*文件中。但是当我在Cypress下运行相同的应用程序时,process.env对象为空。当React应用程序在Cypress下运行时,我如何提供这些变量以供其使用?我知道我有可能设置Cypress env变量,但这不是我想要的-这是一个不同的范围。
.env.*
process.env
8fq7wneg1#
你可以使用configuration API并在你的插件文件上做类似的事情。设置config.env = process.env,这将为Cypress设置你的整个节点env。
config.env = process.env
Cypress
// cypress/plugins/index.js module.exports = (on, config) => { // modify env value config.env = process.env // return config return config }
您还可以选择性地为config.env.YOUR_VAR = process.env.YOUR_VAR指定所需的值。
config.env.YOUR_VAR = process.env.YOUR_VAR
66bbxpm52#
在Cypress中,环境变量(可通过Cypress.env访问)与操作系统级环境变量的作用域不同,为了使process.env变量在Cypress中可用,需要使用第三方库,如dotenv包,这是非常流行的。
Cypress.env
npm install dotenv
确保这行代码位于cypress.config.js的顶部
cypress.config.js
require('dotenv').config()
现在可以使用process.env了,但只能在cypress.config.js文件下使用。正如另一个答案中提到的,应该通过将所有process.env属性传递给Cypress环境变量来利用Cypress.env()命令,以便可以在Cypress中全局访问这些变量
// cypress.config.js module.exports = defineConfig({ e2e: { setupNodeEvents(on, config) { config.env = { ...process.env, ...config.env } return config } } })
型请注意,在Cypress 10.0.0及更高版本中,添加了setupNodeEvents以替换弃用的插件文件。现在,您可以通过以下方式检索这些变量:
10.0.0
Cypress.env("your_proccess_env_property")
byqmnocz3#
创建包含环境变量的cypress.env.json文件:
cypress.env.json
{ "api_url": "http://localhost:8080" }
然后在cypress/support/index.js中设置process.env:
cypress/support/index.js
... before(() => { process.env. REACT_APP_API_URL = Cypress.env("api_url"); })
amrnrhlw4#
对于我的用例,我可以简单地做到以下几点。
// cypress.config.js require('dotenv').config(); const { defineConfig } = require('cypress'); module.exports = defineConfig({ ..., env: { ...process.env, }, });
希望这对未来的其他人有帮助!
9rygscc15#
如果您想使用相同的变量,使用与react app相同的方式,同时只运行Cypress而不运行app(这就是process.env为空的原因),您可以在cypress.config.js中添加它
const dotenvOutput = require('dotenv').config()
然后按以下方式访问变量
module.exports = defineConfig({ e2e: { env: { api_url: dotenvOutput.parsed.REACT_APP_API_URL, },
您还需要确保.env文件在运行cypress的地方可用。
.env
5条答案
按热度按时间8fq7wneg1#
你可以使用configuration API并在你的插件文件上做类似的事情。设置
config.env = process.env
,这将为Cypress
设置你的整个节点env。您还可以选择性地为
config.env.YOUR_VAR = process.env.YOUR_VAR
指定所需的值。66bbxpm52#
在Cypress版本10.3.0及更高版本中更新
在Cypress中,环境变量(可通过
Cypress.env
访问)与操作系统级环境变量的作用域不同,为了使process.env
变量在Cypress
中可用,需要使用第三方库,如dotenv包,这是非常流行的。确保这行代码位于
cypress.config.js
的顶部现在可以使用process.env了,但只能在
cypress.config.js
文件下使用。正如另一个答案中提到的,应该通过将所有process.env
属性传递给Cypress环境变量来利用Cypress.env()命令,以便可以在Cypress中全局访问这些变量型
请注意,在Cypress
10.0.0
及更高版本中,添加了setupNodeEvents以替换弃用的插件文件。现在,您可以通过以下方式检索这些变量:
byqmnocz3#
创建包含环境变量的
cypress.env.json
文件:然后在
cypress/support/index.js
中设置process.env
:amrnrhlw4#
对于我的用例,我可以简单地做到以下几点。
希望这对未来的其他人有帮助!
9rygscc15#
如果您想使用相同的变量,使用与react app相同的方式,同时只运行Cypress而不运行app(这就是process.env为空的原因),您可以在
cypress.config.js
中添加它然后按以下方式访问变量
您还需要确保
.env
文件在运行cypress的地方可用。