没有箭头函数
请注意,如果您使用箭头函数,则必须在步骤之外创建一个表示状态的变量,以便在步骤之间共享状态!
let cukesState;
Given('I have {int} cukes in my belly', cukes => {
cukesState = cukes
})
步骤定义是具有表达式的 方法函数块函数函数,它将该定义与一个或多个 表达式 链接到一个或多个 Gherkin 步骤。当 Cucumber 执行场景中的 Gherkin 步骤 时,它将查找匹配的步骤定义来执行。
为了说明它是如何工作的,请查看以下 Gherkin 场景
Scenario: Some cukes
Given I have 48 cukes in my belly
步骤的 I have 48 cukes in my belly
部分(Given
关键字后的文本)将匹配以下步骤定义
package com.example;
import io.cucumber.java.en.Given;
public class StepDefinitions {
@Given("I have {int} cukes in my belly")
public void i_have_n_cukes_in_my_belly(int cukes) {
System.out.format("Cukes: %n\n", cukes);
}
}
或者,使用 Java8 lambda
package com.example;
import io.cucumber.java8.En;
public class StepDefinitions implements En {
public StepDefinitions() {
Given("I have {int} cukes in my belly", (Integer cukes) -> {
System.out.format("Cukes: %n\n", cukes);
});
}
}
package com.example
import io.cucumber.java8.En
class StepDefinitions : En {
init {
Given("I have {int} cukes in my belly") { cukes: Int ->
println("Cukes: $cukes")
}
}
}
package com.example
import io.cucumber.scala.{ScalaDsl, EN}
class StepDefinitions extends ScalaDsl with EN {
Given("I have {int} cukes in my belly") { cukes: Int =>
println(s"Cukes: $cukes")
}
}
Given('I have {int} cukes in my belly') do |cukes|
puts "Cukes: #{cukes}"
end
const { Given } = require('cucumber')
Given('I have {int} cukes in my belly', function (cukes) {
console.log(`Cukes: ${cukes}`)
});
步骤定义的表达式可以是 正则表达式 或 Cucumber 表达式。本节中的示例使用 Cucumber 表达式。如果您更喜欢使用正则表达式,则匹配中的每个 捕获组 捕获组 捕获组 输出参数 输出参数 将作为参数传递给步骤定义的 方法函数块函数函数。
@Given("I have {int} cukes in my belly")
public void i_have_n_cukes_in_my_belly(int cukes) {
}
Given("I have {int} cukes in my belly") { cukes: Int ->
println("Cukes: $cukes")
}
Given("I have {int} cukes in my belly") { cukes: Int =>
println(s"Cukes: $cukes")
}
Given(/I have {int} cukes in my belly/) do |cukes|
end
Given(/I have {int} cukes in my belly/, function (cukes) {
});
如果 捕获组 捕获组 捕获组 输出参数 输出参数 表达式与注册的 参数类型 之一的 regexp
相同,则在将捕获的字符串传递给步骤定义的 方法函数块函数函数 之前,它将被转换。在上面的示例中,cukes
参数将是一个整数,因为内置的 int
参数类型的 regexp
是 \d+
。
步骤定义可以通过将状态存储在实例变量中,将状态传递给后续的步骤定义。
步骤定义不链接到特定的功能文件或场景。步骤定义的文件、类或包名称不会影响它将匹配的 Gherkin 步骤。唯一重要的是步骤定义的表达式。
当 Cucumber 遇到没有匹配步骤定义的 Gherkin 步骤 时,它将打印一个具有匹配 Cucumber 表达式 的步骤定义代码片段。您可以将此作为新步骤定义的起点。
请考虑这个 Gherkin 步骤
Given I have 3 red balls
如果您没有匹配的步骤定义,Cucumber 将建议以下代码片段
@Given("I have {int} red balls")
public void i_have_red_balls(int int1) {
}
@Given("I have {int} red balls") { balls: Int ->
}
Given("I have {int} red balls") { balls: Int =>
}
Given('I have {int} red balls') do |int1|
end
Given("I have {int} red balls", function (int1) {
});
建议的代码片段将使用您自己的 参数类型,如果它们匹配您未定义步骤的某些部分。如果存在 color 参数类型,Cucumber 将在建议的表达式中使用它
@Given("I have {int} {color} balls")
public void i_have_color_balls(int int1, Color color) {
}
@Given("I have {int} {color} balls") { balls: Int, color: Color ->
}
Given("I have {int} {color} balls") { (balls: Int, color: Color) =>
}
Given('I have {int} {color} balls') do |int1, color|
end
Given("I have {int} {color} balls", function (int1, color) {
});
确保在运行 Cucumber 时使用 summary
插件,以便打印代码片段。
您可以帮助我们改进此文档。 编辑此页面.