reactjs 如何在Cypress运行的浏览器中使用process.env变量

vcirk6k6  于 2022-12-18  发布在  React
关注(0)|答案(5)|浏览(161)

在我的应用程序(React基于create-react-app)的源代码中,我使用了如下的env变量:存储在我的.env.*文件中。
但是当我在Cypress下运行相同的应用程序时,process.env对象为空。当React应用程序在Cypress下运行时,我如何提供这些变量以供其使用?
我知道我有可能设置Cypress env变量,但这不是我想要的-这是一个不同的范围。

8fq7wneg

8fq7wneg1#

你可以使用configuration API并在你的插件文件上做类似的事情。设置config.env = process.env,这将为Cypress设置你的整个节点env。

// 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指定所需的值。

66bbxpm5

66bbxpm52#

在Cypress版本10.3.0及更高版本中更新

在Cypress中,环境变量(可通过Cypress.env访问)与操作系统级环境变量的作用域不同,为了使process.env变量在Cypress中可用,需要使用第三方库,如dotenv包,这是非常流行的。

npm install dotenv

确保这行代码位于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以替换弃用的插件文件。
现在,您可以通过以下方式检索这些变量:

Cypress.env("your_proccess_env_property")
byqmnocz

byqmnocz3#

创建包含环境变量的cypress.env.json文件:

{
  "api_url": "http://localhost:8080"
}

然后在cypress/support/index.js中设置process.env

...

before(() => {
  process.env. REACT_APP_API_URL = Cypress.env("api_url");
})
amrnrhlw

amrnrhlw4#

对于我的用例,我可以简单地做到以下几点。

// cypress.config.js
require('dotenv').config();
const { defineConfig } = require('cypress');

module.exports = defineConfig({
    ...,
    env: {
        ...process.env,
    },
});

希望这对未来的其他人有帮助!

9rygscc1

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的地方可用。

相关问题