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

2024-05-04

我读了赛普拉斯中的环境变量 https://www.toolsqa.com/cypress/environment-variables-in-cypress/以及有关在 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???"
    }
  }
}

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

在运行时,它们被合并在内存中,并且可以通过赛普拉斯.env https://docs.cypress.io/api/cypress-api/env.html#Examples.

// 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 运行程序中,单击“设置/配置”以查看合并的 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" 
} */

但是您可以将reducer应用于env对象以获得嵌套结构,

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"
  }
} */

将其添加到测试的顶部,或者添加到赛普拉斯/支持/index.js.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何引用 Cypress 配置文件中的环境变量? 的相关文章

随机推荐