2012-04-20 74 views
1

我有一個簡單的用戶登錄系統:如何存根CURRENT_USER方法Rspec的

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管理員用戶的正確設置。

但是測試仍然說:您無權訪問此頁面。 這是來自康康。

我沒有正確存根嗎?謝謝。

回答

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

我把這個作爲規範,並把它稱爲一個塊之前,但它仍然無法正常工作 – lulalala 2012-07-03 08:14:12

+0

可能是你需要設置實例變量@current_user – gayavat 2012-07-03 08:18:32

+5

您應該使用rspec的序列,而不是隨機創建一個ID – fotanus 2013-08-13 23:28:36

相關問題