评估赛普拉斯配置文件

Mik*_*tov 0 node.js cypress

在我的构建脚本中,我需要评估 Cypress 配置文件。我正在使用以下脚本:

let appdata = process.env.LOCALAPPDATA;
let version = `11.0.1`;
let src = `${appdata}/Cypress/Cache/${version}/Cypress/resources/app/node_modules/@packages/data-context/src`;
const DataContext = require(`${src}/DataContext.js`).DataContext;
const ProjectConfigManager  = require(`${src}/data/ProjectConfigManager.js`).ProjectConfigManager;

(async() => {
  const ctx = new DataContext({
      schema: null,
      schemaCloud: null,
      modeOptions: "run",
      appApi: {},
      localSettingsApi: {},
      authApi: {

      } ,
      configApi: {
      },
      projectApi: {

      } ,
      electronApi: {
      } ,
      browserApi: {

      },
    })

  let configManager = new ProjectConfigManager({
       ctx,
       configFile: 'C:\\work\\sample\\sample.config.ts',
       projectRoot: 'C:\\work\\sample',
       handlers: [],
       hasCypressEnvFile: false,
       eventRegistrar: null/*new EventRegistrar()*/,
       onError: (error) => {},
       onInitialConfigLoaded: () => {},
       onFinalConfigLoaded: () => Promise.resolve(),
       refreshLifecycle: () => Promise.resolve(),
     })

  configManager.configFilePath = "sample.config.ts"
  configManager.setTestingType('e2e')

  let cfg = await configManager.getConfigFileContents()

  console.log(JSON.stringify(cfg));

})();

Run Code Online (Sandbox Code Playgroud)

它适用于Cypress 10版本。然而,Cypress 11引入了一些破坏此脚本的更改。尽管我调整了路径,但仍然无法使其再次工作。目前它失败并出现以下错误:

Error: Cannot find module 'C:\Users\mbolotov\AppData\Local\Cypress\Cache\11.0.1\Cypress\resources\app\node_modules\graphql\index'. Please verify that the package.json has a valid "main" entry
Run Code Online (Sandbox Code Playgroud)

如何解决此问题(无需更改 Cypress 安装)?

或者

还有其他方法可以评估赛普拉斯配置文件(例如从命令行)并获取其值吗?

Pao*_*olo 5

我不清楚确切的用法,但做出一些假设 -/scripts项目文件夹中的 nodejs 脚本可以使用 Cypress 模块 API 编译和解析配置。

它需要一个测试才能运行,可以从脚本内部生成“空测试”。

注意,空测试必须符合项目的规范模式(下面是 std .cy.js

const cypress = require('cypress')
const fs = require('fs')

fs.writeFileSync('../cypress/e2e/null-test.cy.js', 'it("", ()=>{})')

cypress.run({
  project: '..',
  spec: '../cypress/e2e/null-test.cy.js',
  quiet: true
}).then(results => {
  if (results.status === 'failed') {
    console.log(results)
  } else {
    console.log(results.config.resolved)      // output resolved config
  }
})
Run Code Online (Sandbox Code Playgroud)

我没有尝试复制您代码中的所有内容,因为它使用赛普拉斯内部结构并且未公开记录。