重复使用黄瓜步骤
我想重用一些黄瓜步骤,但似乎无法找到正确的方法。
我想写一个像这样的步骤:
Given /^I login with (.*) credentials$/ |type|
# do stuff with type being one of "invalid" or "valid"
end
但是,接下来会有另一个步骤:
Given /^I login successfully$
# call "Given I login with valid credentials"
end
所以在测试用户身份验证时我可以使用前者,但大多数其他地方,我可以使用后者,而实际上并不需要重新编码。
有没有办法调用另一个步骤,或者我只是将逻辑放在一个辅助方法中,然后从每个任务调用所述方法(基本上是一种方法提取重构,在阅读我的问题之后,我相信这实际上是最好的方法无论如何)?
更新 :下面描述的方法已被弃用。 从另一个步骤中调用步骤的推荐方式现在看起来像这样:
Given /^I login successfully$/
step "I login with valid credentials"
end
旧的,弃用的方法(供参考):
您可以从以下其他步骤调用步骤:
Given /^I login successfully$/
Given "I login with valid credentials"
Then "I should be logged in"
end
如果某个功能中的所有场景都需要此功能(或其他步骤),则还可以使用常用步骤为每个功能添加一个背景,如下所示:
Background:
Given I log in with valid credentials
Scenario: Change my password
Given I am on the account page
请注意,在最近版本的黄瓜中,调用步骤中步骤的方法已经发生了变化,您会看到如果出现如下错误:“警告:在步骤定义中使用'Given / When / Then'已被弃用,请使用'step'请改用其他步骤:/path/to/step_definitions/foo_steps.rb:631:在`block in'“中。 有关详细信息,请参阅黄瓜wiki。
改变的要点是你现在应该使用step
或steps
方法。
When /^I make all my stuff shiny$/
step "I polish my first thing"
end
When /^I make all my stuff shiny$/
steps %Q{
When I polish my first thing
When I shine my second thing
}
end
从步骤定义调用步骤是一种不好的做法,并且存在一些缺点:
AslakHellesøy建议将流行的操作提取到世界,而不是重复使用步骤。 它将这些操作隔离在一个地方,使代码更容易找到。 您可以将代码提取到常见的Ruby类或模块中。
#/support/world_extensions.rb
module KnowsUser
def login
visit('/login')
fill_in('User name', with: user.name)
fill_in('Password', with: user.password)
click_button('Log in')
end
def user
@user ||= User.create!(:name => 'Aslak', :password => 'xyz')
end
end
World(KnowsUser)
#/step_definitions/authentication_steps.rb
When /^I login$/ do
login
end
Given /^a logged in user$/ do
login
end
以下是关于Cucumber邮件列表中的主题的有用讨论 - 链接
链接地址: http://www.djcxy.com/p/38779.html上一篇: Reuse Cucumber steps
下一篇: Initialize': getaddrinfo: Name or service not known (SocketError