我有4个场景的功能。我想在不同的步骤和场景2中使用我在场景1中设置的1个变量的值。
我使用$但是没有设置。我假设某个功能<$ p>的$ value保持不变
When(/^the user goes to manageusers, picks one of the secondary users$/) do
click_link "Admin"
click_link "Manage Users"
emailofuser=ENV["email"].to_s
atpos = emailofuser.index('@')
emailofuser = emailofuser[0,atpos]
page.body.to_s.scan(/<td>(.*?)@ABC.com<\/td>/).flatten().each do |w|
if "#{w}" != emailofuser
$secondaryUserEmail = "#{w}" + "@ABC.com"
break
end
end
end
When(/^the secondary user logs in with password "([^"]*)"$/) do |arg|
if getURL != URI.parse(current_url)
visit getURL
end
find(:xpath,"//input[@id='user_email']").set($secondaryUserEmail )
fill_in "user_password", :with => arg
click_button "Sign in"
end
在上面的步骤中,步骤在功能文件中的1个场景中,我在功能中的场景2中也具有相同的步骤辅助用户。变量$ secondaryuserEmail有时没有设置,登录为次要用户失败。
对我来说,最好的方法是声明我可以跨场景中的各个步骤以及功能中的各个场景访问的变量。
答案 0 :(得分:0)
您应该找出$ secondaryuserEmail未设置的原因。这听起来像是你正在测试的app中的某个地方的bug。如果它不是错误,您应该尝试处理异常。
对于您的原始问题,在辅助方法中设置变量可能是个好主意,然后调用这些方法以使用实例变量访问它们。大多数人一般建议不要跨场景共享变量,但是我使用了帮助方法来存储我的规范中通常不变的变量。