I’m testing a controller action that redirects to a different
action/view,
sending through some params. In my test, i’m only specifying the
controller
and action that it should redirect to, but the additional params are
making
it fail! Here’s my test:
it “should redirect to batch_saved after completing batch_save” do
post ‘batch_save’, @params
response.should redirect_to(:controller => ‘admin/users’, :action =>
‘batch_saved’)
end
Now, i would expect that since i’m just specifying a controller and
action,
and we redirect to them, that the test would pass. But the params are
breaking it (I know this because i changed the controller action to not
send
params through at all and the test passed). How do i do the test so
that it
doesn’t care about the params?
end
and we redirect to them, that the test would pass. But the params are
breaking it (I know this because i changed the controller action to not send
params through at all and the test passed). How do i do the test so that it
doesn’t care about the params?
When you use a hash it checks the whole hash, so this is the expected
behaviour.
You can either used a named route (if you’ve got one available) or a
String literal:
Hi David - thanks for replying. The literal doesn’t work either,
because of
all the params at the end, and i don’t have named routes in this old,
non-restful app. I see your point about the hash…is there any way to
get
the redirected-to url from ‘response’ and test against that? Then i
could
split it at “?” to ignore the params. (I’d rather not include the
specific
params in this test since i really just want to know about where it’s
redirected to).
I’ve been looking for documentation for methods for the response object,
to
get the url, but i can’t find any in the api docs (i’m probably just
looking
in the wrong place). I can see the url data in the object but it’s
private.
I’ve been looking for documentation for methods for the response object, to
get the url, but i can’t find any in the api docs (i’m probably just looking
in the wrong place). I can see the url data in the object but it’s private.
This would let you express exactly what you want and only accept a
Hash and only match those present in the expectation, ignoring
anything else in the Hash.
I don’t have the cycles to add this anytime soon, so if you like the
idea, feel free to submit a patch to the tracker.
This would let you express exactly what you want and only accept a
Hash and only match those present in the expectation, ignoring
anything else in the Hash.
I don’t have the cycles to add this anytime soon, so if you like the
idea, feel free to submit a patch to the tracker.
I’d be happy to do that, although I’m not entirely convinced that
redirect_with is the right name, not that I’ve got a better
alternative.
I’m new to rspec (and coding in general) but would it break a lot of
people’s tests if redirect_to was changed to do this by default? It’s
what
i expected it to do, personally, that is to pass if the given :action
and
:controller match up. If i pass a url string, and it’s missing the
params,
then it seems fair that it should fail, but if for example i just
specify a
controller, and that controller is called (with any action) i’d expect
it to
pass as well.
Like i say i’m a newb with no idea of the impact of this to existing
tests
I’m new to rspec (and coding in general) but would it break a lot of
people’s tests if redirect_to was changed to do this by default? It’s what
i expected it to do, personally, that is to pass if the given :action and
:controller match up. If i pass a url string, and it’s missing the params,
then it seems fair that it should fail, but if for example i just specify a
controller, and that controller is called (with any action) i’d expect it to
pass as well.
Like i say i’m a newb with no idea of the impact of this to existing tests
It is conceivable that existing examples could break, but the docs do
set out the same expectation that you have.