我今天和一位同事进行了深入的讨论。是否从另一个被认为是最佳实践的步骤开始? 所以,例如:
Given /a turtle/ do
puts "turtle!"
end
Given /two turtles/ do
step "a turtle"
step "a turtle"
end
在我看来,这意味着如果不检查整个项目,就无法更改要素文件。因此,如果我想保持DRY,我更喜欢使用从这些步骤调用的“代码”功能(即在Ruby中)。
def turtle do
puts "turtle!"
end
Given /a turtle/ do
turtle
end
Given /two turtles/ do
turtle
turtle
end
如果我别无选择,我甚至更愿意复制代码而不是调用其他步骤。
Given /a turtle/ do
puts "turtle!"
end
Given /two turtles/ do
puts "turtle!"
puts "turtle!"
end
什么是最佳做法?为什么?
答案 0 :(得分:2)
嵌套步骤是一种非常糟糕的做法。如果你这样做,你很快就会陷入困境。一个好的步骤定义是对方法的一行调用。其他任何事情都会很快变得混乱
考虑:
When "I login" do
visit login_path
fill_in ...
...
submit
end
When "I login as as admin" do
visit admin_login_path
fill_in ...
...
end
看看有多重复。现在你可以通过逐步嵌套和传递参数来删除它,但是你最终会得到一个很难调试的非常复杂的步骤定义,所以只需调用一个辅助方法
When "I login" do
login user: @i
end
When "I login as an admin" do
login user: @i, role: admin
end
我们在这里做的是仅使用步骤定义来完成一个简单的任务,将场景中的一行转换为方法调用。现在所有复杂的东西都采用标准方法。编程语言非常适合处理复杂性。当我们编写登录方法时,我们将拥有各种工具和技术,因此我们可以在保持代码干燥的同时管理任何复杂性。
答案 1 :(得分:0)
最好像这样使用
<强>功能强>
Given "2" turtles
步骤定义
Given / "(\d+)" turtles/ do | count |
count.times.do
puts "turtle!"
end
end