在 npm 脚本中设置 baseUrl 不会改变它(Cypress)

Geo*_*rge 0 node.js npm package.json cypress cypress-configuration

我希望能够通过修改 的值在任何 URL 上运行我的 Cypress 脚本,baseUrl但该命令不会更改它。

"cypress open --env version=development --config baseUrl=https://google.com"
Run Code Online (Sandbox Code Playgroud)

我也尝试过 env 变量,但这也不起作用:

"cypress:open:dev": "cypress open --env version=development,baseUrl=https://google.com"
Run Code Online (Sandbox Code Playgroud)

配置文件:

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'
  },
});
Run Code Online (Sandbox Code Playgroud)

开发.json:

{
    "env": {
        "baseUrl": "https://test.com",
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 6

您将覆盖这些config.env设置,并且必须将它们合并回配置中。

export default defineConfig({
  e2e: {
    async setupNodeEvents(on, config) {
      ...
      config = {
        ...config,                    // take config defined in this file
        ...configFile,                // merge/override from the external file
        env: {...config.env}          // don't merge env
      }
      ...
      return config
    },
    reporter: 'mochawesome',
    // baseUrl: 'http://example.com',     // cannot use this with above merge!!
  },
})
Run Code Online (Sandbox Code Playgroud)

不过,如果您这样做,则无法baseUrl直接设置,因为它将优先于development.json.

问题是,为什么env.baseUrl在development.json?为什么不遵循标准约定和使用

开发.json:

{
  "baseUrl": "https://test.com",
}
Run Code Online (Sandbox Code Playgroud)