运行不同屏幕尺寸的规格

时间:2013-11-28 11:02:26

标签: selenium rspec capybara

为验证我的布局适用于不同的屏幕尺寸,我的验收测试实际上是这样的:

require "spec_helper"

[:small, :medium, :large].each do |size|
  feature "Some feature", js: true, screen_size: size do
    scenario "Some scenario" do
      # ...
    end
  end
end

在我的规范助手中,我将rspec配置为使用before(:each)块来调整浏览器窗口的大小。

RSpec.configure do |config|
config.before(:each) do
  if example.metadata[:js]
    if example.metadata[:screen_size]
      resize_browser_window(example.metadata[:screen_size])
    else
      resize_browser_window(:large)
    end
  end
end

我真正想做的是这样的事情:

require "spec_helper"

feature "Some feature", js: true, devices: [:small, :medium, :large] do
  scenario "Some scenario" do
    # ...
  end
end

然后使用around(:each)块为每个屏幕大小运行方案:

RSpec.configure do |config|
  config.around(:each) do |example|
    if example.metadata[:devices]
      example.metadata[:devices].each do |size|
        resize_browser_window(size)
        example.run
      end
    end
  end
end

这部分起作用。该示例针对每个已定义的设备运行,但窗口根本不会调整大小。

有人对我有暗示吗?

1 个答案:

答案 0 :(得分:1)

我找到了一种解决方法来存档所需的行为:

RSpec.configure do |config|
  config.around(:each) do |example|
    if example.metadata[:devices]
      example.metadata[:devices].each do |size|
        example.metadata[:screen_size] = size
        example.run
      end
    end
  end
  config.before(:each) do
    if example.metadata[:js]
      if example.metadata[:screen_size]
        resize_browser_window(example.metadata[:screen_size])
      end
    end
  end
end