如何在Rspec中存根current_user方法

时间:2012-04-20 04:12:51

标签: ruby-on-rails rspec factory-bot cancan

我有一个简单的用户登录系统:

module SessionsHelper
  def logged_in?
    current_user.present?
  end

  def current_user
    @current_user ||= begin
                        if session[:current_user_id]
                          User.find(session[:current_user_id]) rescue nil
                        end
                      end
  end
end
我在ApplicationController中包含的

class ApplicationController < ActionController::Base
  include SessionsHelper
  helper SessionsHelper

我正在尝试测试横幅控制器:

require 'spec_helper'
describe Admin::BannersController do
  describe 'POST create' do
    let(:user){  create(:user_admin) }
    before do
      controller.stub(:current_user){ user }
    end

    it "create action should render new template when model is invalid" do
      Banner.any_instance.stubs(:valid?).returns(false)
      post :create
      response.should render_template(:new)
    end

:user_admin是正确设置的Factory Girl管理员用户。

但是测试仍然说:您无权访问此页面。 这是来自康康。

我没有正确存根吗?感谢。

1 个答案:

答案 0 :(得分:2)

  def fake_user
    user = FactoryGirl.build(:user, :id => 100000 + rand(100000))
    stub(controller).current_user { user }
    user
  end