我已经阅读了赛普拉斯的环境变量和其他有关在赛普拉斯运行中传递环境变量的文章。但是,如何在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变量的一个来源,命令行是另一个。
在运行时,它们会合并到内存中,并可以通过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.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中添加它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句