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

时间:2017-11-13 10:37:38

标签: javascript configuration cypress

TL; DR:

我正在尝试使用baseUrl文件覆盖cypress.json的{​​{1}}值,但我似乎无法弄清楚如何。有没有办法做到这一点?

背景

cypress.env.json文件中设置环境变量,稍后在cypress.json中覆盖它们为easy as pie。在cypress.env.json

cypress.json

...并在{ "env": { "someVariable": "originalValue" } }

cypress.env.json

关于配置变量the documentation states

  

如果您的环境变量与标准配置键匹配,那么它们将改为覆盖配置值,而不是设置{ "someVariable": "newValue" }

但是,如果我尝试从environment variable ...

设置baseUrl
cypress.json

...并在{ "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内:

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

baseUrl中设置cypress.json并稍后使用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

总结一下:我是否遗漏了文档中的内容,或文档中缺少哪些内容?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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