Cypress+Cucumber框架下能否在Step 2内部执行已定义的Step 1
测试步骤复用问题解答
你可以在Step 2内部直接调用已经定义好的Step 1,当前主流BDD测试框架均支持步骤嵌套调用,就是为了解决重复代码冗余的问题。
实现方式(以Cucumber.js为例)
方式1:直接调用已有步骤
通过框架提供的invoke方法即可直接调用已注册的步骤,注意需使用普通函数声明步骤才能拿到上下文绑定的this对象,箭头函数会丢失该上下文:
And('My Step 1', function () { // Step 1 原有逻辑 some code; }); And('My Step 2', function () { // 调用已定义的 Step 1 this.invoke('My Step 1'); // Step 2 剩余逻辑 code; });
方式2:抽离公共逻辑(更推荐)
如果需要多处复用同一段逻辑,更建议把核心代码抽成独立公共函数,相比嵌套调用步骤,可读性和可扩展性更高:
// 抽离Step 1的核心逻辑为公共函数 const step1CoreLogic = () => { some code; }; And('My Step 1', () => { step1CoreLogic(); }); And('My Step 2', () => { step1CoreLogic(); // Step 2 剩余逻辑 code; });
两种方式适用场景
- 仅需要临时组合多个已有步骤时,直接用
invoke调用更便捷 - 需要复用核心逻辑、或需要传参调整逻辑时,优先选择抽离公共函数的方案
内容的提问来源于stack exchange,提问作者Pavel Kartavkin
相关产品推荐
相关产品推荐

