我的移动版和桌面版之间的前端完全不同。
在Cucumber上定义它们时,你无法确定步骤范围,所以我坚持使用两种解决方案(正如我所见):
这对我来说似乎都不是最佳选择。
有更好/更清洁的方法吗?
答案 0 :(得分:1)
您可以为此使用标记和钩子,使用其测试的网站版本标记每个方案/功能:
@mobile
Scenario: Logging in on mobile
Given I visit the login page
@desktop
Scenario: Logging in on desktop
Given I visit the login page
使用一些钩子设置一个变量,指示正在测试的站点的版本:
Before '@mobile' do
@version = :mobile
end
Before '@desktop' do
@version = :desktop
end
然后在你的步骤中:
Given /^I visit the login page$/ do
if @version == :desktop
# Desktop specific code
elsif
# Mobile specific code
else
raise "Don't know what to do!"
end
end
答案 1 :(得分:0)
我最终使用的解决方案类似于Jon M.
对于同意的步骤,我做了一个“元”步骤,传递到正确的上下文。这是一个例子:
When /^I log in$/ do
step %Q{I log in on #{@context}}
end
然后在另一个文件中(由上下文分隔)我有:
When /^I log in on mobile$/ do
# do stuff
end
为了设置上下文,我创建了一个支持模块。基本上,它保留当前上下文并且还有一个默认值,您可以通过以下步骤进行更改:
Given /^I am on the "(.*?)" version$/ do |version|
@context = version
end
这不完全是我如何设置上下文部分,但你得到了图片。
这方面的优点是,我可以拥有无限的上下文,而这个“元”步骤将会捡起它们。我也没有臃肿的步骤。每个步骤都很简单,只处理它自己的上下文逻辑。
缺点是,对于我所拥有的每个非默认上下文,我需要一个背景,说明我处于不同的上下文中。
我不会在这里接受正确答案,因为没有这样的事情。你可以用不同的方法处理它,直到现在,甚至没有最佳实践:)