我们想要通过在Cucumber中加入“特殊常量”来解决一些配置问题。例如,我们希望在步骤中使用文本"__USER__"
的任何地方,应该用运行应用程序的当前用户替换(以便我们可以测试用户权限等内容)。
我试图采取的策略是做这样的事情:
BeforeStep do |step|
domain = get_domain()
username = get_username()
step.text.gsub("__USER__", "#{domain}/#{username}")
end
但是,没有BeforeStep
。我尝试使用Before do |scenario| ... end
,但该方案没有我可以使用的任何东西。我们如何在代码中将"__USER__"
的实例替换为用户(以及"__CURRENT_DATE__"
的实例与当前日期等)?
答案 0 :(得分:0)
我通常使用黄瓜通过视图记录用户,然后从那里运行测试。
类似的东西:
Given a user exists with email: "user@gmail.com", account_type: "customer"
When I go to the homepage
And I follow "Sign in"
And I fill in "email" with "user@gmail.com"
And I fill in "password" with "password"
And I press "Sign in"
答案 1 :(得分:0)
我认为这是编写更多声明性步骤的情况,例如When the user logs in
而不是像When I fill in "txt_user_name" with "fred"
这样的事情。在这种情况下编写步骤定义会很容易:
When /^the user logs in$/ do
domain = get_domain()
username = get_username()
fill_in "txt_user_name", :with => "#{domain}/#{username}"
end
您甚至可以引入步骤参数转换,将文本“用户”转换为您需要的用户名,这样您就不必重复进行更改:
CAPTURE_USER = Transform /^(the user)$/ do |this_isnt_used|
domain = get_domain()
username = get_username()
"#{domain}/#{username}"
end
When /^(#{CAPTURE_USER }) logs in$/ do |user_name|
puts "Logging in as #{user_name}"
end
这将与步骤Given the user logs in
匹配,并将正确的用户名作为参数传递。
另外,回顾一下你的问题,你可以使用一个转换来完成你想要做的事情并让它替换__USER__
的实例,但我不会自己选择那个选项 - 感觉就像它会过多地影响场景的可读性。你的选择虽然!