title: Stubbing Chained Queries in Rails 3 and Rspec
body: <p>I'm trying to test a scope I have that is based upon a chain of other scopes. ("public_stream" below).</p>
  
  <pre><code>scope :public, where("entries.privacy = 'public'")
  scope :completed, where("entries.observation &lt;&gt; '' AND entries.application &lt;&gt; ''")
  scope :without_user, lambda { |user| where("entries.user_id &lt;&gt; ?", user.id) }
  scope :public_stream, lambda { |user| public.completed.without_user(user).limit(15) }
  </code></pre>
  
  <p>Using a test like this:</p>
  
  <pre><code>    it "should use the public, without_user, completed, and limit scopes" do
        @chain = mock(ActiveRecord::Relation)
        Entry.should_receive(:public).and_return(@chain)
        @chain.should_receive(:without_user).with(@user).and_return(@chain)
        @chain.should_receive(:completed).and_return(@chain)
        @chain.should_receive(:limit).with(15).and_return(Factory(:entry))
  
        Entry.public_stream(@user)
      end
  </code></pre>
  
  <p>However, I continue to receive this error:</p>
  
  <pre><code>Failure/Error: Entry.public_stream(@user)
  undefined method `includes_values' for #&lt;Entry:0xd7b7c0&gt;
  </code></pre>
  
  <p>It seems includes_values is an instance variable of the ActiveRecord::Relation object, but when I try to stub it, I still receive the same error. I was wondering if anyone had experience with stubing Rails 3's new chained queries? I can find a bunch of discussion over 2.x's find hash, but nothing on how to test what's current.</p>