覆盖 cypress.env.json 中的配置变量

Overriding configuration variables from cypress.env.json

TL;DR:

我正在尝试使用我的 cypress.env.json 文件覆盖 cypress.json 中的 baseUrl 值,但我似乎无法弄清楚如何。有办法吗?

背景

cypress.json 文件中设置 环境变量 ,然后在 cypress.env.json 中覆盖它们,就像 easy as pie 一样。在 cypress.json:

{
  "env": {
    "someVariable": "originalValue"
  }
}

... 在 cypress.env.json 中:

{
  "someVariable": "newValue"
}

关于配置变量the documentation states

If your environment variables match a standard configuration key, then instead of setting an environment variable they will instead override the configuration value.

但是,如果我尝试从 cypress.json 设置 baseUrl...

{
  "baseUrl": "http://example.com/setFromCypress.json",
  "env": {
    "someVariable": "originalValue"
  }
}

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

{
  "baseUrl": "http://example.com/setFromCypress.env.json",
  "someVariable": "newValue"
}

... 然后 someVariable 被覆盖,但现有的 baseUrl 保持不变(并且 baseUrl 出现在 env 键处的对象内部:

cypress.json 中设置 baseUrl 并稍后在命令行中使用 CYPRESS_BASE_URL:

覆盖它时我没有问题
$ export CYPRESS_BASE_URL=http://example.com/setFromCommandLine

然后,原来的baseUrl被覆盖:

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

在上面的post之后,在related github issue中说明了这不算bug。来自 cypress.env.json 的变量被加载到整个配置中的 environmentVariables 变量中(尽管当前文档会让您相信)。整体配置文件是cypress.json。在 github 问题中,我提供了有关当前解释为何令人困惑的备份。

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

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