« Return to Thread: params are making my "should redirect_to" test fail - why??

Re: params are making my "should redirect_to" test fail - why??

by Max Williams :: Rate this Message:

Reply to Author | View in Thread

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).

So, ideally i could do something like this -

response.url.split("?").first.should eql("http://test.host/admin/users/batch_saved")

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.

thanks
max

On 13/02/2008, David Chelimsky <dchelimsky@...> wrote:
On Feb 13, 2008 12:26 PM, Max Williams <toastkid.williams@...> wrote:
>
> 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
>
> and here's the failure report:
>
> 'Admin::UserController When logged in as an admin level user should redirect
> to batch_saved after batch_save' FAILED
> expected redirect to {:controller=>"admin/users", :action=>"batch_saved"},
> got redirect to
> "http://test.host/admin/users/batch_saved?music_service_id=1&new_users%5B%5D%5Bemail%5D=mark%40zadeup.com&new_users%5B%5D%5Bfirstname%5D=Mark&new_users%5B%5D%5Bmusic_service_id%5D=1&new_users%5B%5D%5Bschool%5D=&new_users%5B%5D%5Bsurname%5D=Madeup"
>
> 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?


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:

response.should redirect_to(admin_users_batch_saved)
response.should redirect_to('/admin/users/batch_saved')

Based on Jay Field's latest advice
(http://blog.jayfields.com/2008/02/testing-expect-literals.html) you
may want to consider the literal.

HTH,
David


>
>
> --

> View this message in context: http://www.nabble.com/params-are-making-my-%22should-redirect_to%22-test-fail---why---tp15460582p15460582.html
> Sent from the rspec-users mailing list archive at Nabble.com.
>
> _______________________________________________
> rspec-users mailing list
> rspec-users@...
> http://rubyforge.org/mailman/listinfo/rspec-users
>
_______________________________________________
rspec-users mailing list
rspec-users@...
http://rubyforge.org/mailman/listinfo/rspec-users


_______________________________________________
rspec-users mailing list
rspec-users@...
http://rubyforge.org/mailman/listinfo/rspec-users

 « Return to Thread: params are making my "should redirect_to" test fail - why??