Cucumber中使用And关键字报错:(0 , _cucumber.And) is not a function 原因咨询
解决Cucumber中
(0 , _cucumber.And) is not a function错误 这个错误我之前帮人排查过好几次,核心原因是Cucumber v6及以上版本已经不再单独导出And(以及But)关键字了,咱们一步步来解决:
错误原因
在旧版Cucumber中,你可以直接导入And来定义步骤,但从v6版本开始,官方移除了And/But的单独导出——因为这两个关键字本质是Feature文件里的语义化语法糖,实际执行时会自动关联到前面的Given/When/Then步骤定义,不需要单独在代码里定义And函数。
解决方案
方案1:用标准关键字替换And(推荐)
根据步骤的语义,把步骤定义里的And换成Given/When/Then中的一个,Feature文件里的And完全不用改,Cucumber会自动识别关联。
修改你的步骤定义代码:
// 注意:如果是新版Cucumber,包名是@cucumber/cucumber,不是旧的cucumber import { Given, When, Then } from '@cucumber/cucumber'; Given(/^User goes to login page$/, () => { loginPage.goToLogin(); }); // 把And换成When(根据步骤语义,这里是登录页之后的动作,用When更合适) When(/^Enters wrong credentials$/, () => { loginPage.enterData(); });
你的Feature文件保持不变:
Given User goes to login page And Enters wrong credentials
执行时Cucumber会自动把And关联到前面的Given对应的步骤定义逻辑,完全不影响测试流程。
方案2:手动创建And别名(可选)
如果你习惯在步骤定义里用And,可以自己给Given/When/Then创建别名:
import { Given, When, Then } from '@cucumber/cucumber'; // 根据步骤语义,把And关联到对应的关键字,这里关联到When const And = When; Given(/^User goes to login page$/, () => { loginPage.goToLogin(); }); And(/^Enters wrong credentials$/, () => { loginPage.enterData(); });
额外检查
确认你的package.json里的Cucumber包名:新版官方包是@cucumber/cucumber,旧的cucumber包已经不再维护了,建议升级到最新版避免其他兼容性问题。
内容的提问来源于stack exchange,提问作者Blessy
相关产品推荐
相关产品推荐

