rails中的view.stub部分rspec给出了未定义的方法view_context'

时间:2013-02-25 11:56:18

标签: ruby-on-rails rspec

使用Rails 3.2.11

我有几个视图rspec测试,我需要存根' current_user'呼叫。

我已经成功地在常规视图测试中使用了这个:

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由controllers / helpers.rb中的Devise定义(在gem中)。我在视图或控制器中使用它作为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 %> 

有没有人知道如何成功地将它变为stub_user,我在这里不知所措......

感谢

1 个答案:

答案 0 :(得分:6)

原来,将view.stub(:current_user){@client}移动到每个'it'块中解决了问题;如果它在'before:each / all'块中似乎不起作用。