【问题标题】:Combining environment variables in Cypress?在赛普拉斯中组合环境变量?
【发布时间】:2020-12-08 02:31:03
【问题描述】:

这是我的How to refer to environment variables in Cypress config files? 帖子的后续。 Steve Zodiac 的答案确实是正确的。

所以我有一个像这样的环境块的配置文件

{
  "env" : {
    ...
    "db" : {
      "user"     : "db_user",
      "password" : "pw1234",
      "host"     : "my_db.company.com",
      "port".    : 3306
    }
    ...
}

我不想硬编码user/password 凭据,所以我在命令行上执行此操作

$ npm run cy:open -- --config-file config/my_config.json --env '{"db":{"user":"db_user","password":"pw1234"}}'

并删除我的配置文件中的 userpassword 键/值对。

{
  "env" : {
    ...
    "db" : {
      "host"     : "my_db.company.com",
      "port".    : 3306
    }
    ...
}

我在赛普拉斯控制台的赛普拉斯Setting->Configuration 选项卡中看到了正确的db: user/pw 凭据。但是,当我运行上面的命令时,我看到了这个错误,也就是说,好像没有正确设置数据库凭据。

Error: (conn=716050, no: 1045, SQLState: 28000) Access denied for user ''@'10.40.0.44' (using password: NO)

如果我创建一个虚拟变量,像这样

{
  "env" : {
    ...
    "db" : {
      "user"     : "dummy",
      "password" : "dummy",
      "host"     : "my_db.company.com",
      "port".    : 3306
    }
    ...
}

并在上面运行我的npm run cy:open... 命令,我得到以下信息。 IOW,虚拟值不会像我预期的那样被传入的值取代。

Error: (conn=782727, no: 1045, SQLState: 28000) Access denied for user 'dummy'@'10.40.0.44' (using password: YES)

我错过了什么?

【问题讨论】:

  • 如果您在cypress.json 中为用户名和密码创建虚拟变量,会有帮助吗?例如。在“db”中,创建类似“user”:“dummy”,“password”:“dummy”的内容。
  • 一个问题是--env 需要key=value 格式,但您只给出了值部分。即使使用正确的格式,您也无法传递对象。命令行上的值始终是一个字符串(带引号或不带引号) - 这是命令行环境的限制。
  • @AlapanDas 我更新了我的 OP 来回答你的问题。
  • @RichardMatsen,我想我正在给它键/值部分,我在 Cypress Settings->Configuration 控制台中看到它们。

标签: cypress


【解决方案1】:
--env '{"db":{"user":"db_user","password":"pw1234"}}'cyress are you sure its working ? 

不是有效的格式,你确定它可以工作吗?

当你使用--运行后,命令行选项的其余部分没有通过,尝试删除第一个--你会得到解析错误

--env '{"db":{"user":"db_user","password":"pw1234"}}'

有效的格式是key:value

https://docs.cypress.io/guides/guides/command-line.html#cypress-open-env-lt-env-gt

--env db={"user":"db_user","password":"pw1234"}}

一旦使用 JSON.parse() 这将等同于

"env":{
   "db":{
      {
         "user":"db_user",
         "password":"pw1234"
      }
   }
}

因此,将变量添加到现有变量的唯一方法是更新插件文件 index.js

// cypress/plugins/index.js
module.exports = (on, config) => {


  // modify env var value
  config.env.db.password= config.env.password

  // return config
  return config
}

并将密码传递为

 --env  password="something"

现在你可以访问它了

 Cypress.env('db').password

【讨论】:

  • -- 在选项之前是必需的,因为cy:openpackage.json 中的一个脚本。如果命令是npm run cypress open,那么你会放弃它。见npm-run-script
  • @RichardMatsen cyorress open --env 语法是 key:value ,而不是 --env {}
  • @RichardMatsen 感谢理查德补充
  • @RichardMatsen 补充说抱歉我错过了
  • 这成功了!诀窍是index.js 文件中的module.exports{} 代码
猜你喜欢
  • 2022-11-07
  • 1970-01-01
  • 2020-10-09
  • 1970-01-01
  • 2021-05-18
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 2022-07-22
相关资源
最近更新 更多