我希望能够通过修改baseUrl
的值在任何URL上运行我的Cypress脚本,但命令并没有改变它。
"cypress open --env version=development --config baseUrl=https://google.com"
我也尝试过env变量,但也不起作用:
"cypress:open:dev": "cypress open --env version=development,baseUrl=https://google.com"
设定档:
export default defineConfig({
e2e: {
async setupNodeEvents(on, config) {
const version = config.env.version || 'development'
const configFile = await import(path.join(
config.projectRoot,
'cypress/config',
`${version}.json`
));
const credentialsFile = await import(path.join(
config.projectRoot,
'cypress/config',
'credentials.json'
));
config = {
...config, // take config defined in this file
...configFile // merge/override from the external file
}
config.env = {
...config.env, // 2nd level merge
...credentialsFile[version] // from git-ignored file
}
config.baseUrl = configFile.baseUrl
return config
},
reporter: 'mochawesome'
},
});
development.json:
{
"env": {
"baseUrl": "https://test.com",
}
}
3条答案
按热度按时间mwngjboj1#
配置从多个源合并。看起来
setupNodeEvents()
中的代码是最终设置,即它在应用命令行覆盖后运行。因此,
config.baseUrl = configFile.baseUrl
导致了该问题。我会把它改成
由于没有通过config中的硬编码属性设置baseUrl,
例如,
当没有命令行覆盖时,它将是
undefined
,但是如果有命令行覆盖,则它具有值。因此,使用上面的OR运算符,它只会在
configFile.baseUrl
还没有值的情况下才赋值。从命令行保存.env
由于您使用
--env
传递覆盖,因此合并config
和configFile
的这一节完全替换了config.env
节,假设您的development.json
具有问题中给出的结构。因此后面的任何操作都无效。
相反,保存初始的
config.env
,并在以后合并credentialsFile时使用它。现在OR条件(
||
)按预期工作,我的结果
当我运行它的时候,我得到
baseUrl: 'https://google.com'
运行时得到
baseUrl: 'https://test.com'
configFile的路径中包含env
请注意,您的
development.json
在baseUrl
之前的路径中有env
,因此请将configFile.baseUrl
变更为configFile.env.baseUrl
。but5z9lq2#
您正在覆盖
config.env
设置,必须将它们合并回配置中。但是,如果您这样做,则不能直接设置
baseUrl
,因为它将优先于development.json
。问题是,为什么
env.baseUrl
在development.json
中?为什么不遵循标准惯例并使用开发人员.json:
1cklez4t3#
您可以使用此命令来设置baseUrl: