如何将环境名称传递给赛普拉斯测试以加载一组环境变量?

Posted

技术标签:

【中文标题】如何将环境名称传递给赛普拉斯测试以加载一组环境变量?【英文标题】:How can I pass an env name to Cypress tests to load a set of env variables? 【发布时间】:2021-10-27 19:09:50 【问题描述】:

赛普拉斯页面仍然神秘,没有回答这个问题:https://docs.cypress.io/guides/guides/environment-variables#Option-2-cypress-env-json

此外,他们的示例以迫使我编写 shell 脚本来处理切换变量的方式做到这一点:https://github.com/cypress-io/cypress-example-recipes/tree/master/examples/server-communication__env-variables。没有办法硬编码环境名称对我有用:https://github.com/cypress-io/cypress-example-recipes/blob/2e5fb3da420f544637ff77d81ff7261f5d2164e8/examples/server-communication__env-variables/cypress/integration/spec.js#L5

所以,我创建了一个名为 cypress.playground.json 的文件,但我不知道如何告诉赛普拉斯加载它。


    "baseUrl": "https://my-url.hostname/ui/",
    "defaultCommandTimeout": 10000,
    "video" : true

并且,从命令行运行时。这是我“猜测”如何传递 env 值:

✘-1 ~/Documents/GitHub/me [Branch-Name|✔] 
16:35 $ cypress run --headed --browser chrome --env playground
Cypress encountered an error while parsing the argument env

You passed: playground

The error was: Cannot read property 'split' of undefined
✘-1 ~/Documents/GitHub/me [Branch-Name|✔] 
16:35 $ cypress run --headed --browser chrome --config playground
Cypress encountered an error while parsing the argument config

You passed: playground

The error was: Cannot read property 'split' of undefined

我的意图是在运行测试之前覆盖默认值 baseUrl

【问题讨论】:

【参考方案1】:

这是我想出的变种。

这个区别是你可以将cypress.json与你指定的文件结合起来,例如cypress.playground.json

/plugins/index.js

const fs = require('fs')

module.exports = (on, config) => 

  const configFile = `cypress.$config.env['env-file'].json` // relative to project root
  const addConfig = JSON.parse(fs.readFileSync(configFile))
  const combinedConfig =  ...config, ...addConfig   // overwrites keys like baseUrl

  return combinedConfig

命令行

yarn cypress open --env env-file=playground

cypress.playground.json


  "baseUrl": "http://example.com"

【讨论】:

谢谢,是的,我在docs.cypress.io/api/plugins/…找到了答案

以上是关于如何将环境名称传递给赛普拉斯测试以加载一组环境变量?的主要内容,如果未能解决你的问题,请参考以下文章

赛普拉斯 - 4000 毫秒后重试超时:预计会找到元素 - 仅在 Jenkins 中

赛普拉斯与SystemJS

如何在赛普拉斯运行的浏览器中使用 process.env 变量

如何检查在赛普拉斯 e2e 测试中元素是不是永远不可见?

赛普拉斯在多项测试中冻结

赛普拉斯测试 Material-UI 日期选择器不适用于 Github 操作