Forum: RSpec Documentation about the returns method

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Fernando P. (Guest)
on 2009-01-14 23:51
Hi,

From the railscasts website source code, in the episodes_controller_spec
I read:

  it "index action with search should search published episodes" do
    Episode.expects(:search_published).with('foo').returns(Episode.all)
    get :index, :search => 'foo'
  end

Here are my questions:
- What does the returns(Episode.all) mean?
- Is it stubbing what the search_published method returns?
- Is it useful to add the returns(Episode.all) method call here?
- Whats the difference with and_return(Episode.all)?
- Shouldn't we only test for:
Episode.expects(:search_published).with('foo')?
Fernando P. (Guest)
on 2009-01-14 23:53
Fernando P. wrote:
> Hi,
>
> From the railscasts website source code, in the episodes_controller_spec
> I read:
>
>   it "index action with search should search published episodes" do
>     Episode.expects(:search_published).with('foo').returns(Episode.all)
>     get :index, :search => 'foo'
>   end
>
> Here are my questions:
> - What does the returns(Episode.all) mean?
> - Is it stubbing what the search_published method returns?
> - Is it useful to add the returns(Episode.all) method call here?
> - Whats the difference with and_return(Episode.all)?
> - Shouldn't we only test for:
> Episode.expects(:search_published).with('foo')?

I also forgot to add:
What's the difference between expects and should_receive? I can get my
head around it.
David C. (Guest)
on 2009-01-15 01:17
(Received via mailing list)
On Wed, Jan 14, 2009 at 3:53 PM, Fernando P. 
<removed_email_address@domain.invalid>
wrote:
>>
>> Here are my questions:
>> - What does the returns(Episode.all) mean?

This calls Episode.all one time and stores the result. When Episode
receives :search_publishe with 'foo', that's what it returns. Make
sense?

>> - Is it stubbing what the search_published method returns?

Yes

>> - Is it useful to add the returns(Episode.all) method call here?

If you don't, nothing will be returned. If the application code relies
on the return value, then it is definitely useful - necessary, in
fact.

>> - Whats the difference with and_return(Episode.all)?

No semantic difference - different library (see below).

>> - Shouldn't we only test for:
>> Episode.expects(:search_published).with('foo')?

No - the returns statement is not part of the expectation - it's the
value to return when search_published is received.

>
> I also forgot to add:
> What's the difference between expects and should_receive? I can get my
> head around it.

Two different mocking libraries:

spec/mocks:

  Episode.should_receive(:search_published).with('foo').and_return(Episode.all)

mocha (used in the screen cast):

  Episode.expects(:search_published).with('foo').returns(Episode.all)

HTH,
David
Fernando P. (Guest)
on 2009-01-16 17:20
David C. wrote:
> On Wed, Jan 14, 2009 at 3:53 PM, Fernando P. <removed_email_address@domain.invalid>
> wrote:
>>>
>>> Here are my questions:
>>> - What does the returns(Episode.all) mean?
>

Okay I get it now. Thank you very much.
This topic is locked and can not be replied to.