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

时间:2016-07-30 23:38:39

标签: ruby-on-rails ruby rspec

我在这里遇到了一个奇怪的情况。

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

我通过什么导致了这种行为?

1 个答案:

答案 0 :(得分:1)

测试"记住我"功能需要能够使永久cookie过期而不删除它(我认为Capybara::Session#reset_session!正在删除所有你的cookie),这是show_me_the_cookies gem所做的用例真的很好。