[rspec-users] params are making my "should redirect_to" test fail - why??

David Chelimsky dchelimsky at gmail.com
Thu Feb 14 08:06:02 EST 2008


On Thu, Feb 14, 2008 at 5:15 AM, Max Williams
<toastkid.williams at gmail.com> wrote:
> 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")

Try response.redirect_url.

>
>  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 at gmail.com> wrote:
> > On Feb 13, 2008 12:26 PM, Max Williams <toastkid.williams at gmail.com>
> 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 at rubyforge.org
> > > http://rubyforge.org/mailman/listinfo/rspec-users
> > >
> > _______________________________________________
> > rspec-users mailing list
> > rspec-users at rubyforge.org
> > http://rubyforge.org/mailman/listinfo/rspec-users
> >
>
>
> _______________________________________________
>  rspec-users mailing list
>  rspec-users at rubyforge.org
>  http://rubyforge.org/mailman/listinfo/rspec-users
>


More information about the rspec-users mailing list