使用Cucumber测试同一站点的移动和桌面版本

时间:2012-09-10 15:42:27

标签: cucumber bdd

我的移动版和桌面版之间的前端完全不同。

在Cucumber上定义它们时,你无法确定步骤范围,所以我坚持使用两种解决方案(正如我所见):

  • 写下与其他版本冲突的每一步,明确说明我是哪个版本
  • 设置一个“背景”,告诉我我的上下文是什么,并更改所有步骤定义以检查此上下文

这对我来说似乎都不是最佳选择。

有更好/更清洁的方法吗?

2 个答案:

答案 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

这不完全是我如何设置上下文部分,但你得到了图片。

这方面的优点是,我可以拥有无​​限的上下文,而这个“元”步骤将会捡起它们。我也没有臃肿的步骤。每个步骤都很简单,只处理它自己的上下文逻辑。

缺点是,对于我所拥有的每个非默认上下文,我需要一个背景,说明我处于不同的上下文中。

我不会在这里接受正确答案,因为没有这样的事情。你可以用不同的方法处理它,直到现在,甚至没有最佳实践:)