【问题标题】:How to refer to environment variables in Cypress config files?如何在赛普拉斯配置文件中引用环境变量?
【发布时间】:2020-12-07 23:48:16
【问题描述】:

我已阅读 Environment Variables in Cypress 和其他有关在赛普拉斯运行中传递环境变量的文章。但是如何在我的 JSON 配置文件中引用环境变量?

例如,我喜欢

$ npm run cy:open -- --config-file config/mytests.json --env db.user=db_user,db.password=pw1234abcd

因为我想避免像这样在我的配置文件中对数据库凭据进行硬编码

{
  ...
  "env" : {
    "db" : {
      "user" : "db_user",
      "password" : "pw1234abcd"
    }
  }
}

但是 JSON 文件中使用传入值的语法是什么?这应该是什么样子?

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

【问题讨论】:

    标签: cypress


    【解决方案1】:

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

    在运行时,它们被合并到内存中,可以使用Cypress.env 访问。

    // cypress.json
    {
      "env": {
        "foo": "bar",
        "baz": "quux"
      }
    }
    
    npm run cy:open -- --env user=db_user
    
    Cypress.env() // => { foo: "bar", baz: "quux", user: "db_user" }
    

    在 Cypress 运行器中,单击 Settings/Configuration 以查看合并的 env 对象。


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

    // cypress.json
    {
      "env": {
        "foo": "bar",
        "baz": "quux"
      }
    }
    
    npm run cy:open -- --env db.user=db_user,db.password=pw1234abcd
    
    Cypress.env() 
    /* => { 
      foo: "bar", 
      baz: "quux", 
      db.user: "db_user", 
      db.password: "pw1234abcd" 
    } */
    

    但你可以对 env 对象应用 reducer 以获得嵌套结构,

    const env = Cypress.env();
    
    Object.keys(env)
      .reduce((env, key) => {
        if (key.includes('.')) {
          const [parent, child] = key.split('.');
          if (!env[parent]) {
            env[parent] = {};
          }
          env[parent][child] = env[key];
          delete env[key];
        }
        return env;
      }, env)
    
    Cypress.env(env); // save back to Cypress if required
    
    console.log(env);
    
    /* => { 
      foo: "bar", 
      baz: "quux", 
      db: {
        user: "db_user", 
        password: "pw1234abcd"
      }
    } */
    

    将此添加到测试的顶部,或在 cypress/support/index.js 中。

    【讨论】:

    • 这是有道理的。当我查看Settings->Configuration 时,我怎样才能传递我的变量,以便它们看起来像{"db":{"user":"db_user","password":"pw1234abcd"}}
    • 我尝试了我之前评论中的方式,但该语法不起作用。
    • 好的,如果我这样做'{...}'(用单引号括起来)我是我想要的格式,但似乎没有使用它们,因为我因数据库连接失败。我的文件中“env”的“db”部分中有“其他”值,我希望我传入的变量被“添加”到那里?
    猜你喜欢
    • 1970-01-01
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多