如何在Cypress配置文件中引用环境变量?

如何在Cypress配置文件中引用环境变量?,cypress,Cypress,我读过一些关于在Cypress运行中传递环境变量的文章和其他文章。但是,如何在JSON配置文件中引用环境变量 例如,我有 $ npm run cy:open -- --config-file config/mytests.json --env db.user=db_user,db.password=pw1234abcd 因为我想避免在我的配置文件中硬编码DB cred,如下所示 { ... "env" : { "db" : {

我读过一些关于在Cypress运行中传递环境变量的文章和其他文章。但是,如何在JSON配置文件中引用环境变量

例如,我有

$ npm run cy:open -- --config-file config/mytests.json --env db.user=db_user,db.password=pw1234abcd
因为我想避免在我的配置文件中硬编码DB cred,如下所示

{
  ...
  "env" : {
    "db" : {
      "user" : "db_user",
      "password" : "pw1234abcd"
    }
  }
}
但是JSON文件中使用传入值的语法是什么?这应该是什么样子

{
  ...
  "env" : {
    "db" : {
      "user" : "???syntax???",
      "password" : "???syntax???"
    }
  }
}

配置文件只是环境变量的一个源,命令行是另一个源

在运行时,它们会合并到内存中,并可以使用进行访问

//cypress.json
{
“环境”:{
“foo”:“bar”,
“baz”:“quux”
}
}
npm运行cy:打开--env user=db\u user
Cypress.env()/=>{foo:“bar”,baz:“qux”,user:“db_user”}
在Cypress runner中,单击“设置/配置”以查看合并的环境对象


通过命令行传递变量是有点限制的,所有“嵌套”类型键(带“.”)都以平坦的方式合并,即

//cypress.json
{
“环境”:{
“foo”:“bar”,
“baz”:“quux”
}
}
npm运行cy:open--env db.user=db_user,db.password=pw1234abcd
柏树
/* => { 
福:“酒吧”,
baz:“quux”,
db.user:“db_用户”,
db.password:“pw1234abcd”
} */
但是你可以对环境对象应用一个缩减器来得到一个嵌套的结构

const env=Cypress.env();
Object.keys(env)
.reduce((环境,键)=>{
if(键包括('.')){
const[parent,child]=键拆分('.');
如果(!env[parent]){
env[parent]={};
}
env[parent][child]=env[key];
删除env[key];
}
返回环境;
},环境)
柏树环境(环境);//如果需要,请保存回Cypress
console.log(env);
/* => { 
福:“酒吧”,
baz:“quux”,
db:{
用户:“db_用户”,
密码:“pw1234abcd”
}
} */

将其添加到测试的顶部,或者添加到有意义的cypress/support/index.js

中。那么,当我查看
设置->配置时,如何传递我的变量,使它们看起来像
{“db”:{“user”:“db_user”,“password”:“pw1234abcd”}
?我尝试了我在上一篇评论中使用的方法,但语法不起作用。好的,如果我使用
'{…}'
(用单引号括起来),我会使用我想要的格式,但似乎没有使用它们,因为我的DB连接失败。我的文件中“env”的“db”部分有“other”值,我希望传入的变量被“添加”到那里?好的,我明白你的意思了。。。