2016-05-26 5 views
0

Ich habe ein merkwürdiges Verhalten NUR in Feature-Tests bemerkt, wenn ein Benutzer nicht angemeldet ist und nicht zur Anmeldeseite umgeleitet wird und ich versuche zu verstehen, warum. Ich verwende Poltergeist als Javascript-Treiber.Entwickle Feature-Tests, die nicht auf sign_in umleiten Seite

Hier ein paar Beispiele:

# works as expected 
it 'redirects to sign_in page when not logged in' do 
    get :index, {} 
    expect(response).to eq('/users/sign_in') 
end 

# does not redirect to '/users/sign_in' 
it 'should redirect to the user sign in page' do 
    visit '/' 
    expect(page.current_path).to redirect_to('/users/sign_in') 
end 

Weiß jemand, warum devise nicht auf die sign_in Seite in Feature-Tests Umleitung wird?

Antwort

0

Sie können redirect_to nicht mit Capybara verwenden - Capybara liefert keine Daten darüber, ob die Seite sie umleitet, sondern nur die URL, auf der sie sich befindet. Sie wollen wahrscheinlich

expect(page).to have_current_path('/users/sign_in') 

Hinweis: eine naive Art und Weise, die gleiche Sache zu überprüfen, um zu versuchen, wäre expect(page.current_path).to eq('/users/sign_in') jedoch zu tun, dass die current_path würde sofort überprüfen, die schuppigen Tests verursachen, wenn da die meisten Aktionen mit JS fähigen Treiber verwendet in Diese Treiber können asynchron auftreten. Die Verwendung des have_current_path-Matchens führt zu einem Warte-/Wiederholungsverhalten und ist daher die richtige Methode.

+0

Ich habe dies versucht: expect (page) .to have_current_path ('/ user/sign_in', url: true) und es zurückgegeben: erwartet "http://www.example.com/" gleich "/ user/sign_in " – user1200990

+0

@ user1200990 Warum würden Sie" url: true "weitergeben? Das sagt ihm, dass er mit der vollständigen URL vergleichen soll - du vergleichst nur den Pfad - du willst auch dein test.log überprüfen und sehen, welche Antworten gesendet werden –

+0

wenn ich das herausnehme, funktioniert es immer noch nicht und Ich bekomme: erwartet "/" gleich "/ user/sign_in" – user1200990

Verwandte Themen