我正在使用宝石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
答案 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