我在这里遇到了一个奇怪的情况。
我在RSpec / Capybara的集成测试中创建了一个帮助来执行'登录':
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
如您所见,它具有remember_me
参数,默认值为false
。它在某种测试中工作正常:
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
但是,当我需要更改调用remember_me
方法的log_in
默认值时,其值不会发生变化:
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
以下是我在rails_helper.rb
中配置的方式:
.
.
.
require 'helpers/authentication_helper'
RSpec.configure do |config|
config.include AuthenticationHelper, type: :feature
.
.
.
我已经测试了使用remember_me
修复true
只是为了确认方法调用是问题。
我通过什么导致了这种行为?
答案 0 :(得分:1)
测试"记住我"功能需要能够使永久cookie过期而不删除它(我认为Capybara::Session#reset_session!
正在删除所有你的cookie),这是show_me_the_cookies
gem所做的用例真的很好。