用水豚进行浏览器宝石测试

时间:2016-05-05 14:57:04

标签: ruby-on-rails ruby capybara

我正在使用宝石Browser 检测移动设备并将其重定向到rails应用程序上的不同登陆。我使用的代码就是这个:

Rails.configuration.middleware.use Browser::Middleware do
  redirect_to mobile_landing_path if browser.device.mobile? || browser.device.ipad? || browser.device.tablet?
end

现在我需要使用Rspec和capybara进行功能测试,我在这里有点迷失。真的很感激帮助。

我现在正在使用capybara user agent进行测试,看起来像这样:但似乎仍有基础着陆,而不是移动着陆

feature 'Visiting the site from an' do
 context 'Android device' do
  background do
   set_user_agent(:android)
  end

  scenario 'I should be redirected to mobile landing' do
    visit root_path
    expect(page).to have_current_path(mobile_landing_path)
  end
 end
end

1 个答案:

答案 0 :(得分:1)

只有在设置了HTTP_ACCEPT标头并且匹配%r [(text / html | / )]时,才会运行浏览器gem中间件。默认情况下,机架测试驱动程序不会设置任何标头。您可以覆盖提供的驱动程序注册,如

Capybara.register_driver :rack_test do |app|
  Capybara::RackTest::Driver.new(app, :headers => { 'HTTP_ACCEPT' => 'text/html' })
end

或者您可以创建新的驱动程序注册

Capybara.register_driver :rack_test_with_html_accept do |app|
  Capybara::RackTest::Driver.new(app, :headers => { 'HTTP_ACCEPT' => 'text/html' })
end

然后将driver: :rack_test_with_html_accept元数据添加到需要设置标题的测试中

feature 'Visiting the site from an', driver: :rack_test_with_html_accept do
  ...
end