我目前正在尝试在Cucumber(对于Ruby)中定义多步骤步骤定义,但是在子步骤之一中使用变量时遇到了麻烦。下面,我试图在最后一个子步骤中使用“ policy_name”变量,但无法让Cucumber识别其变量值,而是继续将其用作字符串。
Given("I should NOT be able to go back using the browser back button
after doing something {string}") do |policy|
step 'I click on "something"'
step 'I "do this" via computer'
step 'I click on the browser back button'
policy_name = case policy
when "policy1" then "something1"
when "policy2" then "something2"
end
step 'I should be on the "Specified" page
for #{policy_name}'
end
答案 0 :(得分:0)
您使用单引号还是双引号?双引号允许插值,而单引号仅使用内容而不转换任何变量。 "#{policy_name}"
应该有效,而'#{any_variable}'
应该无效。
答案 1 :(得分:0)
不要编写这样的步骤,也不要嵌套步骤,您只会陷入混乱。同样,给出的是建立状态的,而不是做某事的。
如果您有类似这样的复杂步骤,那么与嵌套步骤相比,您有两个更好的选择
具有“当我单击某物时”之类的步骤会适得其反。这一步是关于如何完成某事的。场景应该与您正在做什么以及为什么重要有关。功能和场景不是用于编程的,它们是用于描述行为的,应该非常简单。所以你应该写类似
的东西Scenario: When I foo then the back button is disabled
Given ...
When I foo
Then the back button should be disabled
我银行的一个例子是
Scenario: Smile login disables back button
Given I am logged into smile banking
When I try and use the back button
Then I should see the back button disabled warning
最后,每个步骤定义都应该只是对辅助方法的调用。例如
Given 'I am logged into smile banking' do
# NOTE: both params are also helper methods
login(site: smile_banking, user: create_user)
end
这使您可以将所有复杂性推到黄瓜之外,并推入代码中。代码可以处理复杂性,而Cucumber无法处理。