You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cypress 10.3.0如何实现类似旧版testFiles按指定顺序运行测试

Cypress 10.3.0 自定义测试执行顺序配置方案

问题根因

你当前配置不生效有三个核心原因:

  • Cypress 10+ 版本已完全废弃旧版cypress.json的testFiles配置项,根目录残留的旧cypress.json不会被正常读取,反而可能干扰新配置加载,建议直接删除或移出项目根目录。
  • specPattern配置项仅用于通过glob规则匹配测试文件,不保证执行顺序:Cypress默认会将所有匹配到的测试文件按文件名字母序排序执行,无论你在specPattern里写路径的顺序如何,最终都会被重新排序。
  • 你之前配置的specPattern路径是旧版默认的cypress/integration/,Cypress 10默认e2e测试目录为cypress/e2e/,默认识别后缀为.cy.js,路径不匹配也会导致配置不符合预期。

可落地方案

方案1:命令行--spec参数指定顺序(最稳妥,零额外代码)

Cypress原生支持通过--spec参数传入按顺序排列的测试文件列表,执行顺序完全和你传入的列表顺序一致,和旧版testFiles的使用体验完全一致。
示例命令(按2test→1test→3test的自定义顺序执行):

node_modules/.bin/cypress run --spec "cypress/e2e/2test.cy.js,cypress/e2e/1test.cy.js,cypress/e2e/3test.cy.js"

你可以直接把命令配置到package.json的scripts中,替换原有husky钩子、CI流程里的cypress执行命令,比如:

"scripts": {
  "start": "HTTPS=true react-scripts start",
  "build": "react-scripts build",
  "build-beta": "REACT_APP_SECRET_CODE=beta react-scripts build",
  "build-qa": "REACT_APP_SECRET_CODE=qa react-scripts build",
  "test": "react-scripts test",
  "eject": "react-scripts eject",
  "cypress:run": "cypress run --spec \"cypress/e2e/2test.cy.js,cypress/e2e/1test.cy.js,cypress/e2e/3test.cy.js\""
},
"husky": {
  "hooks": {
    "pre-commit": "lint-staged && npm run cypress:run --headless"
  }
}

后续无论是本地执行、CI流水线还是钩子触发,直接调用npm run cypress:run即可按指定顺序跑测试。如果你的测试文件还在旧的cypress/integration/目录、后缀为.js,把命令里的路径替换成实际路径即可。

方案2:配置层重排spec列表(直接执行cypress run即可生效)

如果你不想在命令行写长串参数,可以在cypress.config.js的setupNodeEvents钩子中拦截Cypress解析到的测试文件列表,按自定义顺序重排后返回,配置示例:

const { defineConfig } = require('cypress')
const path = require('path')

// 按你需要的执行顺序排列测试文件名
const TEST_EXEC_ORDER = [
  '2test.cy.js',
  '1test.cy.js',
  '3test.cy.js'
]

module.exports = defineConfig({
  video: true,
  viewportWidth: 1920,
  viewportHeight: 1024,
  numTestsKeptInMemory: 1,
  defaultCommandTimeout: 10000,
  e2e: {
    // 替换为你实际存放测试文件的glob匹配规则
    specPattern: 'cypress/e2e/**/*.cy.js',
    setupNodeEvents(on, config) {
      // 保留原有插件逻辑
      require('./cypress/plugins/index.js')(on, config)

      // 按自定义顺序重排测试列表
      const orderedSpecs = []
      // 先加入指定顺序的测试文件
      TEST_EXEC_ORDER.forEach(fileName => {
        const targetSpec = config.specs.find(spec => path.basename(spec.relative) === fileName)
        if (targetSpec) orderedSpecs.push(targetSpec)
      })
      // 未在顺序列表中声明的其他测试文件,追加到列表末尾按默认顺序执行
      config.specs.forEach(spec => {
        if (!orderedSpecs.includes(spec)) orderedSpecs.push(spec)
      })
      config.specs = orderedSpecs
      return config
    },
    baseUrl: 'https://localhost:3000',
  },
})

配置完成后,直接执行node_modules/.bin/cypress run就会按你在TEST_EXEC_ORDER中声明的顺序执行测试,和旧版testFiles配置效果完全一致。

注意事项

  • 配置前先删除根目录下残留的旧版cypress.json,避免Cypress启动时触发旧配置迁移逻辑,导致新配置不生效。
  • 确认specPattern匹配规则和你实际的测试文件存放路径、后缀一致,否则会出现漏跑、多跑无关文件的问题。
  • 不要尝试通过在specPattern中写有序数组/逗号分隔路径的方式控制顺序,Cypress会对所有glob匹配到的文件重新做字母排序,你写的路径顺序不会被保留。

内容的提问来源于stack exchange,提问作者Александр

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 15:48:15