0

我有一个网站在移动版和桌面版的前端完全不同。

在 Cucumber 上定义步骤时,您无法确定步骤的范围,因此我坚持使用两种解决方案(如我所见):

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

这些对我来说似乎都不是最优的。

有没有更好/更清洁的方法来做到这一点?

4

2 回答 2

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
于 2012-09-10T21:21:30.670 回答
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

这不完全是我设置上下文部分的方式,但你明白了。

这样做的好处是,我可以拥有无​​限的上下文,并且这个“元”步骤将拾取它们。我也没有臃肿的脚步。每个步骤都很简单,只处理它自己的上下文逻辑。

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

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

于 2012-09-12T11:49:21.927 回答