2013-02-25 107 views
3

使用Rails 3.2.11view.stub在軌道部分的RSpec給「未定義的方法view_context」

我有幾個,我需要存根「CURRENT_USER」調用視圖RSpec的測試。

我已用常規視圖測試成功地用於此像這樣:

require 'spec_helper' 

describe "projects/_my_project.html.erb" do 

    before(:each) do 
    @client = FactoryGirl.create(:user) 
    view.stub(:current_user) { @client } 
    end 

    describe "new proposals notice" do 
    it "does not display new_propsals if in state posted and clicked after last submitted" do 
     @my_project = FactoryGirl.build(:project, status: "posted", last_proposals_click: "2012-02-02 14:01:00", last_proposal_submitted: "2012-02-02 14:00:00") 
     render :partial => "/projects/my_project", :locals => { :my_project => @my_project } 
     rendered.should_not have_content "You received new proposals" 
    end 
    end 
end 

CURRENT_USER通過設計在控制器/ helpers.rb定義(在寶石)。我在視圖或控制器中將它作爲current_user(作爲方法,而不是實例)在整個地方使用。

這個問題似乎是在view.stub中的視圖左右,這裏是否有另一個對象用於部分?我根本不明白爲什麼這種方法在定期的觀點中是完美的,而不是局部的。

我得到:

Failure/Error: view.stub(:current_user) { @client } 
NoMethodError: 
    undefined method `view_context' for nil:NilClass 

這是從哪兒CURRENT_USER用於完整視圖行:

<% if my_project.user_id == current_user.id %> 

有誰知道我能得到它的成功存根CURRENT_USER,我m在這裏損失...

謝謝

+0

'@ user'是測試雙/模擬模型嗎? – 2013-02-25 12:05:45

+0

嗨,這是一個FactoryGirl創建的模型。 – bobomoreno 2013-02-25 12:13:25

+0

你可以發佈任何其他相關的代碼,比如你的'User'工廠,或者你如何訪問'current_user'(通過方法調用'current_user'或實例變量'@ current_user' ...),也許您試圖存根的視圖代碼片段。此外,不要做任何SO答案[這裏](http://stackoverflow.com/q/12329515/567863)或[這裏](http://stackoverflow.com/q/10537932/567863),或[這個博客(http://blog.joeygeiger.com/2012/03/30/rspec-view-spec-and-dealing-with-current_user/)幫助你? – 2013-02-25 12:31:16

回答

6

原來,移動v iew.stub(:current_user){@client}放入每個'it'塊中解決問題;如果它位於'before:each/all'塊中,它似乎不起作用。