2016-05-05 7 views
0

Ich benutze das Juwel Browser mobile Geräte zu erkennen und umleiten sie zu einer anderen Landung auf einer Schiene App. Der Code, den ich verwende, ist dieser:Browser Gem Test mit Capybara

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

Jetzt brauche ich einen Feature-Test Rspec und Capybara zu tun, und ich bin hier ein wenig verloren. Ich schätze die Hilfe sehr.

Tests habe ich jetzt verwendet capybara user agent und sieht wie folgt aus: aber es scheint es die Basis der Landung und nicht das Handy ein

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

Was genau versuchen Sie zu testen, was haben Sie versucht, welche Fehler haben Sie bekommen? (Auch Ihre Logik scheint rückwärts - ich würde denken, dass Sie auf den mobile_landing_path umleiten möchten, wenn der Browser mobil ist?) –

+0

Ich habe die Logik korrigiert und fügte den Test, den ich versuche, anzugehen –

+0

Sind Sie sicher, Browser und Capybara- user_agent definiert "Android" als explizit mobil? Haben Sie versucht, den Test speziell auf andere mobile Agenten (wie iOS) zu setzen und zu testen, ob das funktioniert? – Beartech

Antwort

1

nur, wenn der HTTP_ACCEPT Header wird ausgeführt Der Browser gem Middleware stillt wird ist gesetzt und entspricht% r [(text/html | /)]. Standardmäßig legt der Rack-Test-Treiber keine Header fest. Sie können entweder die mitgelieferte Treiber-Registrierung wie

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

überschreiben oder Sie können einen neuen Treiber Registrierung

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

erstellen und dann driver: :rack_test_with_html_accept Metadaten zu Ihren Tests hinzufügen, die diesen Header benötigen

feature 'Visiting the site from an', driver: :rack_test_with_html_accept do 
    ... 
end 
eingestellt werden
+0

Danke Herr, du machst meinen Tag –

+0

nur als ein einfacher Kommentar wird bevorzugt, neue Syntax dafür zu verwenden: Capybara :: RackTest :: Driver.new (app, Kopfzeilen: {'HTTP_ACCEPT' => 'text/html' }) Aber die Antwort war wirklich gut gemacht, danke @ TomWalpole –