如何设置由 Cypress 运行的浏览器中可用的 process.env 变量

jep*_*pek 11 environment-variables reactjs create-react-app cypress

在我的应用程序(基于 create-react-app 的 React)的源代码中,我使用了这样的 env 变量:process.env.REACT_APP_API_URL它们存储在我的.env.*文件中。

但是当我在 Cypress 下运行相同的应用程序时,process.env对象是空的。当 React 应用程序在 Cypress 下运行时,如何提供这些变量以在 React 应用程序中使用?

我知道我可以设置 Cypress env 变量,但这不是我想要的 - 这是一个不同的范围。

Kie*_*nHT 20

在 Cypress 10.3.0 及更高版本中更新

在 Cypress 中,环境变量(可通过 访问Cypress.env)与操作系统级环境变量不共享相同的范围。为了使process.env变量在 中可用Cypress,您应该使用第三方库,例如非常流行的dotenv包。

npm install dotenv
Run Code Online (Sandbox Code Playgroud)

确保这行代码位于您的顶部cypress.config.js

require('dotenv').config()
Run Code Online (Sandbox Code Playgroud)

现在您可以使用 process.env,但只能在该cypress.config.js文件下使用。正如另一个答案中提到的,您应该通过将所有属性传递给 Cypress 环境变量来利用Cypress.env()process.env命令,以便您可以在 Cypress 中全局访问这些变量

// cypress.config.js
module.exports = defineConfig({
  e2e: {
    setupNodeEvents(on, config) {
      config.env = {
        ...process.env,
        ...config.env
      }
      return config 
    }
  }
})
Run Code Online (Sandbox Code Playgroud)

请注意,在 Cypress 版本10.0.0及更高版本中,添加了setupNodeEvents以替换已弃用的插件文件。

现在您可以通过以下方式检索这些变量:

Cypress.env("your_proccess_env_property")
Run Code Online (Sandbox Code Playgroud)


Dio*_*cha 8

您可以使用配置 API并在您的插件文件上执行类似操作。设置config.env = process.env这将为Cypress.

// cypress/plugins/index.js
module.exports = (on, config) => {

  // modify env value
  config.env = process.env

  // return config
  return config
}
Run Code Online (Sandbox Code Playgroud)

您还可以使用 有选择地分配所需的值config.env.YOUR_VAR = process.env.YOUR_VAR

  • 该操作询问如何在 Cypress 中设置“process.env”变量。这个答案说明了如何使用“process.env”变量来设置 Cypress 环境变量,不是吗?我缺少什么? (8认同)
  • 我不明白为什么这个答案被接受,它似乎不正确并且在 Next.js 中不起作用。Process.env 未在客户端设置(下一个捆绑器将内联此值,但在 Cypress 中,我们必须手动定义“window.process.env”的值) (3认同)
  • 您需要首先安装 `dotenv` 并将其导入到 `cypress/plugins/index.js` 文件顶部的 `require("dotenv").config();` (2认同)