从cypress.env.json覆盖配置变量

8

TL;DR:

我想使用我的cypress.env.json文件覆盖cypress.json中的baseUrl值,但是我似乎无法弄清楚如何操作。有没有办法实现这一点?

背景

cypress.json文件中设置环境变量,然后在cypress.env.json中覆盖它们就像易如反掌。 在cypress.json中:

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

...并且在cypress.env.json中:

{
  "someVariable": "newValue"
}

关于配置变量文档说明如下:

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

然而,如果我尝试从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保持不变(并且env键处的对象中出现了一个baseUrl)。

A picture of the Cypress configuration when setting baseUrl from both cypress.json and cypress.env.json

我在中设置baseUrl,后来在命令行中使用CYPRESS_BASE_URL覆盖它时没有问题:

$ export CYPRESS_BASE_URL=http://example.com/setFromCommandLine

然后,原始的baseUrl被覆盖:

A picture of the Cypress configuration when setting baseUrl from cypress.json, cypress.env.json and the command line

总结一下:文档中有我漏掉的东西吗,还是文档里确实缺少一些内容?

1
我认为这是一个 bug.. 会创建一个 issue - dwelle
已完成:https://github.com/cypress-io/cypress/issues/909 - vages
我认为你可以将其作为答案添加,@DanSwain。只要这样做,我就会给你打勾号。 ;) - vages
完成@vages。谢谢。 - Dan Swain
2个回答

11
一个简单的解决方法:在 plugins/index.js 中执行以下操作

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


这是一个非常好的解决方案,可以解决广泛遇到的问题,非常感谢! - damusnet
我刚刚花了几个小时来寻找/创建类似的东西。非常感谢! - bildungsroman

5

在上述帖子之后,相关的Github问题中解释说这不被认为是一个错误。尽管当前的文档可能会让您产生误解,但来自的变量将加载到整个配置中的environmentVariables变量中。整个配置文件是cypress.json。在Github问题中,我提供了支持材料,说明为什么当前的解释令人困惑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接