Cypress Cucumber common文件夹步骤定义文件不生效如何解决
问题根因
nonGlobalStepDefinitions设为true时,cypress-cucumber-preprocessor 默认执行单feature文件绑定同路径同名步骤文件的隔离加载逻辑,不会自动扫描独立存放的integration/common目录下的步骤文件。你在package.json中配置commonPath不生效,是因为新版本的预处理插件已不再支持从package.json读取路径类配置,且commonPath本身不具备跨非关联目录自动注入步骤的能力。
解决方法
方案1:全局配置显式指定公共步骤扫描路径
打开项目的Cypress配置文件(cypress.config.js 或对应版本的cypress.json),在cypress-cucumber-preprocessor配置段添加stepDefinitions规则,显式声明公共步骤的匹配路径,参考配置如下:// cypress.config.js 配置示例 const { defineConfig } = require("cypress"); const createBundler = require("@bahmutov/cypress-esbuild-preprocessor"); const addCucumberPreprocessorPlugin = require("@badeball/cypress-cucumber-preprocessor").addCucumberPreprocessorPlugin; const createEsbuildPlugin = require("@badeball/cypress-cucumber-preprocessor/esbuild").createEsbuildPlugin; module.exports = defineConfig({ e2e: { async setupNodeEvents(on, config) { const bundler = createBundler({ plugins: [createEsbuildPlugin(config)], }); on("file:preprocessor", bundler); await addCucumberPreprocessorPlugin(on, config); return config; }, specPattern: "cypress/e2e/**/*.feature", "cypress-cucumber-preprocessor": { nonGlobalStepDefinitions: true, stepDefinitions: [ "cypress/e2e/**/*.{js,ts}", // 匹配各feature文件绑定的同目录步骤文件 "cypress/e2e/common/**/*.{js,ts}" // 显式匹配common目录下所有公共步骤文件 ] } }, });配置完成后完全重启Cypress运行器,不要依赖热重载,插件启动时会重新扫描所有匹配路径下的步骤定义。
方案2:在关联步骤文件中手动引入公共步骤
如果不想修改全局扫描规则,可以在每个feature对应的同名步骤文件顶部,通过相对路径直接引入公共步骤文件,示例:// 例:login.feature 对应的步骤文件 cypress/e2e/login/login.js require("../common/commonSteps.js"); // 引入公共步骤 // 后续编写当前页面独有的步骤定义即可 Given("我访问系统登录页", () => { cy.visit("/login") })该方式支持按需加载公共步骤,不会将所有公共步骤注入到全部测试用例中。
注意:不要将公共步骤相关配置写在package.json中,新版本cypress-cucumber-preprocessor已废弃该配置读取逻辑,所有规则统一放在Cypress配置文件中即可生效。
内容的提问来源于stack exchange,提问作者Seth Barry
相关产品推荐
相关产品推荐

