On Mon, Mar 3, 2008 at 11:21 PM, Namrata Tiwari <[EMAIL PROTECTED]> wrote:
> Here is the action -
>
> def list
>     @articles = find_city.articles.paginate :all,  :page =>
>  params[:page] , :order     => "live_on DESC", :conditions => { :type_for
>  => "blog" }
>  end
>
>  and the spec -
>
>  it "should list all articles 2" do
>     articles = mock("articles")
>     get :list

Whoa. A couple of posts ago you said the action (get :list) was the
last thing. Now it's not anymore. When dealing with mocks and stubs,
order is very important, which is why I asked you where the action
was. Message expectations (mocks) and stub values MUST be set before
the action.

>     controller.should_receive(:find_city).and_return(articles)

The implementation is find_city.articles, so find_city needs to return
something that owns articles.

>     controller.should_receive(:articles)

This one is just wrong - it's the return value of find_city that
should receive articles.

>     articles.should_receive(:paginate).with(:order => "live_on DESC",
>  :conditions => { :type_for => "blog" })

This one is right, but again, needs to happen before the action.

>
>     response.should render_template('articles/list')

This one is correct, and in the correct place (after the action).

>  end
>
>
>  I am stubbing find_city and articles during set up
>
>  before_post do
>    controller.stub!(:find_city)

Here find_city will not return anything, so it'll blow up on
find_city.articles ....

>    controller.stub!(:articles)
>  end
>
>  Is this right?

Here's what you want: http://pastie.caboo.se/161001

HTH,
David

>  --
>
>
> Posted via http://www.ruby-forum.com/.
>  _______________________________________________
>  rspec-users mailing list
>  rspec-users@rubyforge.org
>  http://rubyforge.org/mailman/listinfo/rspec-users
>
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to