覆盖来自 cypress.env.json 的配置变量

vag*_*ges 7 javascript configuration cypress

特尔;博士:

我试图baseUrl通过cypress.json使用我的cypress.env.json文件覆盖该值,但我似乎无法弄清楚如何。有没有办法做到这一点?

背景

在文件中设置环境变量然后在其中cypress.json覆盖它们就像 piecypress.env.json一样简单。在cypress.json

{
  "env": {
    "someVariable": "originalValue"
  }
}
Run Code Online (Sandbox Code Playgroud)

...并在cypress.env.json

{
  "someVariable": "newValue"
}
Run Code Online (Sandbox Code Playgroud)

关于配置变量文档说明

如果您的环境变量与标准配置键匹配,那么environment variable它们将覆盖配置值而不是设置。

但是,如果我尝试baseUrlcypress.json...

{
  "baseUrl": "http://example.com/setFromCypress.json",
  "env": {
    "someVariable": "originalValue"
  }
}
Run Code Online (Sandbox Code Playgroud)

......并在cypress.env.json......中覆盖它

{
  "baseUrl": "http://example.com/setFromCypress.env.json",
  "someVariable": "newValue"
}
Run Code Online (Sandbox Code Playgroud)

... thensomeVariable被覆盖,但现有的baseUrl保持不变(并且 abaseUrl出现在放置在env键处的对象内):

从 cypress.json 和 cypress.env.json 设置 baseUrl 时 Cypress 配置的图片

我设置时没有问题baseUrlcypress.json,后来在使用命令行覆盖它CYPRESS_BASE_URL

$ export CYPRESS_BASE_URL=http://example.com/setFromCommandLine
Run Code Online (Sandbox Code Playgroud)

然后,原始文件baseUrl被覆盖:

从 cypress.json、cypress.env.json 和命令行设置 baseUrl 时 Cypress 配置的图片

总结一下:我是在文档中遗漏了什么,还是在文档中遗漏了什么?

小智 8

一个简单的解决方法:在 plugins/index.js 中做

module.exports = (on, config) => {
  if(config.hasOwnProperty('env') &&  config.env.hasOwnProperty('baseUrl')){
      config.baseUrl = config.env.baseUrl;
  }
  return config
}
Run Code Online (Sandbox Code Playgroud)


Dan*_*ain 5

在上面的帖子之后,在相关的github问题中解释了这不被认为是一个错误。来自的变量cypress.env.json被加载到environmentVariables整个配置中的变量中(尽管当前文档会让您相信)。整体配置文件是cypress.json。在 github 问题中,我提供了关于为什么当前解释令人困惑的备份。