2013-11-22 44 views
1

我已經設計安裝和設置的RSpec準備CURRENT_USER使用controller_macros如何補充點兒色器件

我ControllerMacro:

def login_user 
    before(:each) do 
     @request.env["devise.mapping"] = Devise.mappings[:user] 
     @current_user = Fabricate(:user) 
     @current_user.confirm! # or set a confirmed_at inside the factory. Only necessary if you are using the confirmable module 
     sign_in @current_user 
    end 
    end 

和我payment_controller_spec.rb

describe PaymentController do 
describe "payment" do 
    login_user 
    before(:each) do 
     @current_user.payments.create(method: "bank", amount: "123") 

    end 

    it 'should assign amount_to_pay' do 

     get :bank_payment, { id: @current_user.to_param} 

     expect(assigns[:amount_to_pay]).to eq "123" 
    end 
    end 
end 

錯誤消息

NoMethodError: undefined method `payments' for nil:NilClass 

如何在我的規格內訪問@current_user並添加一些依賴關係?

謝謝

回答

0

我建議這樣的事情在你的控制器宏:

def stub_accessibility(user) 
    controller.stub(:current_user).and_return(user) 
end 

然後在你的控制器規格:

let(:user) { User.new } 

before do 
    stub_accessibility(user) 
end 

這樣,您就可以與您的user玩在你的控制器規範的上下文中。

+0

如果我把'''stub_accessibility(user)''放到before塊中,我得到'''undefined方法'''(我重新啓動了spork服務器)stub_accessibility – Jan

+0

你需要定義'stub_accessiblity'方法你自己在你包含在你的'spec_helper.rb'文件中的模塊中;) –

+0

我已經實現了這個(在devise wiki中描述)並且也成功地使用了login_user方法。 – Jan