RSpec帮助器方法不会更改默认参数值

问题描述:

我在这里有一个真正奇怪的情况。RSpec帮助器方法不会更改默认参数值

我创建了一个帮手,我使用RSpec /水豚集成测试执行“日志”:

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_metrue只是为了确认方法调用是问题所在。

我让通过导致这种行为?

+0

'reset_session!'方法来自哪里?我无法在Capybara API中找到它,它是一种自定义方法吗?它是否会销毁所有永久性cookies以及您的会话cookie?如果你的意思是'reset_sessions!',那么看起来这个方法破坏了你所有的cookies,你可能想用[show_me_the_cookies](https://github.com/nruth/show_me_the_cookies)来测试这个功能。 –

+0

@PaulFioravanti,''reset_session!''属于水豚,是''reset!''的别名。你可以在这里找到它(http://www.rubydoc.info/github/jnicklas/capybara/Capybara%2FSession%3Areset!)。 – rwehresmann

+1

谢谢,就这样!然后,我假设这种方法只是吹走你的cookies(因为它“删除cookies并导航到空白页面”),而不是过期永久cookie。我仍然认为你可能想看看'show_me_the_cookies'。 –

测试“记住我”的功能将需要到期永久的cookie,而不删除它的能力(我认为这是Capybara::Session#reset_session!删除所有你的cookies),这是一个用例的show_me_the_cookies gem确实非常好。