Silly partial qu

hi all,

i’m just trying to check a partial has been rendered, by using:
response.template.should_receive(:render).with(:partial => “tasks/list”)

this passes, even if I put something bogus in the partial name, such as:
response.template.should_receive(:render).with(:partial =>
“___tassdfsdfks/list”)

does anyone know why this doesn’t fail?
is this the wrong way to simply check a partial is being rendered?
am running this as a story step.

thanks,
steven

On Sat, May 3, 2008 at 4:08 PM, steven shingler [email protected]
wrote:

is this the wrong way to simply check a partial is being rendered?
am running this as a story step.

I’m not sure how this is working to begin with.

Where is this expectation in the flow of the code? It would seem to
need to be before the request since it’s a should_receive
But then what’s response at this point?
And what’s response.template?

It’s the controller, not the template which receives the render call.

You say that this is in a story step? I’ve got a hunch that the step
is’nt actually matching and therfore not getting run, which would
explain why the assertion never fails.

If you’re doing this as a full stack rails integration story, I don’t
believe that you’ve got access to the controller, and this level of
specification doesn’t belong here but rather in a controller spec,
where you might want to use expect_render instead of
should_receive(:render) as well.


Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/

Hi Rick,
Thanks for your reply.
You are right that this step is basically testing the basic actions of
a controller, and is being run as part of a story_with_steps stack.
The step itself is definitely being hit, because I have a:
response.should have_tag(‘li’, @title)
…in the same step, and that is working nicely.

This step is called right after clicking an Update button, which is a
standard rails scaffold and does a: redirect_to(@task) - this causes a
partial to be rendered to the screen as part of my default layout, and
I was hoping to be able to verify that the partial loaded.

What would fit my brain better, would be:
response.should render_partial(“tasks/list”)
…but that isn’t available :slight_smile:

I hope that is clearer - I am quite new to the world of rspec.
If you can shed any more light that would be really great.
Thanks,
Steven

Hi Rick - Thanks again.
Cool - I see what you mean about what the story steps should get
involved with, and what should be left to the specs.
In that case, my response.should have_tag(‘li’, @title) is a
reasonable test, and I’ll leave it at that!
All the best,
Steven

On Sun, May 4, 2008 at 10:16 AM, steven shingler [email protected]
wrote:

partial to be rendered to the screen as part of my default layout, and
I was hoping to be able to verify that the partial loaded.

What would fit my brain better, would be:
response.should render_partial(“tasks/list”)

Except that responses don’t render anything, controllers do which
result in the body of the response.

Also even if this were

controller.should render_partial...

I can’t see how this would work, since it seems to involve backwards
time travel. In a controller spec you use

controller.expect_render(:partial => …)

BEFORE doing a get/post etc. It works like x.should_receive(:foo)
it’s something which needs to be set up before something happens.

…but that isn’t available :slight_smile:

I hope that is clearer - I am quite new to the world of rspec.
If you can shed any more light that would be really great.

Rails integration testing happens in the context of a simulated
browser. It’s awkward, if indeed it’s possible at all, to instrument
the mechanisms of controllers and templates here. This is normally
done in controller and/or view specs.

At the story/integration level, I think you really want to be looking
at the result of the http requests, which means you should be setting
expectations about what’s in the response rather than how the response
is going to be constructed.

So instead of trying to determine if the tasks_list partial is being
rendered, why not do something like having the partial generate
evidence that it was invoked in the output, for example it might
generate a div or ol or whatever which contains the tasks list which
has a particular dom id, and then use response.should have_tag to
verify that the task list is in the response?


Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs