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?
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. –
@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
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. –