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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:35:18