2016-07-30 5 views
1

Ich habe eine wirklich seltsame Situation hier.RSpec-Helper-Methode ändert nicht Standard-Argument Wert

habe ich ein Helfer ein 'log in' in meiner Integrationstests mit RSpec/Capybara auszuführen:

module AuthenticationHelper 
    def log_in(user = User.new, remember_me = false) 
    visit new_user_session_path 

    fill_in "Email", with: user.email 
    fill_in "Password", with: user.password 
    check("user_remember_me") if remember_me 
    save_screenshot("/vagrant/screenshot.png") 
    click_button "Log in" 
    end 
end 

Wie Sie sehen können, ist es das remember_me Argument hat, mit Standardwert false. Es funktioniert gut, in einer Art von Tests:

context "when 'remember-me' isn't checked" do 
    before do 
     log_in create(:user) 
     reset_session! 
     visit root_path 
    end 

    it "should not stay connected when browser close the session" do 
     expect(page).to have_selector("a[href='#{destroy_user_session_path}']", count: 0) 
    end 
    end 

Allerdings, wenn ich ändern müssen, ändert sich die remember_me Standardwert Aufruf log_in Methode, den Wert einfach nicht:

context "when 'remember-me' is checked" do 
    before do 
     log_in(create(:user), true) 
     reset_session! 
     visit root_path 
    end 

    it "should stay connected when browser close the session" do 
     expect(page).to have_selector("a[href='#{destroy_user_session_path}']", count: 1) 
    end 
    end 

Hier ist, wie ich konfiguriert es in meinem rails_helper.rb:

. 
. 
. 
require 'helpers/authentication_helper' 

RSpec.configure do |config| 

config.include AuthenticationHelper, type: :feature 
. 
. 
. 

getestet habe ich bereits remember_me mitBefestigungs 210 nur um zu bestätigen, dass der Methodenaufruf das Problem ist.

Was lasse ich passieren, verursacht dieses Verhalten?

+0

Woher kommt die Methode 'reset_session!'? Ich konnte es in der Capybara API nicht finden, also ist es eine benutzerdefinierte Methode? Zerstört es alle Ihre permanenten Cookies sowie Ihre 'Session'-Cookies? Wenn du 'reset_sessions!' Meinst, dann sieht es so aus, als ob diese Methode alle deine Cookies zerstört, und du könntest etwas wie [show_me_the_cookies] (https://github.com/nruth/show_me_the_cookies) verwenden, um diese Funktionalität zu testen. –

+0

@PaulFioravanti, '' reset_session! '' Gehört zu Capybara und ist ein Alias ​​von '' reset! ''. Sie finden es [hier] (http://www.rubydoc.info/github/jnicklas/capybara/Capybara%2FSession%3Areset!). – rwehresmann

+1

Danke, so ist es! Ich gehe dann davon aus, dass diese Methode einfach alle deine Cookies wegbläst (seit sie "Cookies entfernt und [s] zur leeren Seite navigiert"), anstatt die permanenten Cookies auszulöschen. Ich denke immer noch, dass du vielleicht einen Blick auf "show_me_the_cookies" werfen möchtest. –

Antwort

1

Testing „remember me“ -Funktionalität die Fähigkeit erfordern würde es einen permanenten Cookie abläuft, ohne zu löschen (ich glaube, dass Capybara::Session#reset_session!alle Ihre Cookies zu löschen), und das ist ein Anwendungsfall, dass die show_me_the_cookies gem wirklich gut tut.

Verwandte Themen