One of my controller actions sends a redirect if the request URI begins
with /foods/search
34 def search
35 return redirect_to "/#{params[:name]}" if
request.request_uri.match /^\/foods\/search/
Unfortunately, I can't figure out how to spec this.
From everything that I've read while researching this problem, it seems
that #get and #post only accept the action to call, and a hash of
parameters. IE:
get :action, :some => 'param'
As a result, I can't do this:
121 it 'redirects /foods/search/almonds to /almonds' do
122 get '/foods/search/almonds'
123 response.should redirect_to "/almonds"
124 end
How can I spec this?
Thanks for your help,
Nick
on 31.01.2010 23:02
on 02.02.2010 01:49
On Sun, Jan 31, 2010 at 17:02, Nick Hoffman <lists@ruby-forum.com> wrote: > One of my controller actions sends a redirect if the request URI begins > with /foods/search > > 34 def search > 35 return redirect_to "/#{params[:name]}" if > request.request_uri.match /^\/foods\/search/ > > Unfortunately, I can't figure out how to spec this. Do you want to check that search redirects, or the algorithm for computing the redirect path? I would probably check the algorithm separately, then stub the algorithm to check the redirect. -- J. B. (Joe) Rainsberger :: http://www.jbrains.ca :: http://blog.thecodewhisperer.com Diaspar Software Services :: http://www.diasparsoftware.com Author, JUnit Recipes 2005 Gordon Pask Award for contribution to Agile practice :: Agile 2010: Learn. Practice. Explore.
on 21.02.2010 12:00
On 31 January 2010 22:02, Nick Hoffman <lists@ruby-forum.com> wrote: > that #get and #post only accept the action to call, and a hash of > Thanks for your help, > Nick > -- > Posted via http://www.ruby-forum.com/. > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users > You might find this easier to do as an integration test. I'd use cucumber for this. Personally I think speccing controllers is pretty hard for the benefits it gives, and if you keep your controllers real simple and thin and use cucumber you can discard most controller specs.
on 22.02.2010 08:31
Extract redirect logic to an object or helper and test that.
UrlRewriter.new.rewrite('/foods/search/almonds').should == '/almonds'
helper.rewrite_url('/foods/search/almonds').should == '/almonds'
and then you will see that this should probably be called higher up in
the call stack, in a before_filter. Or even higher up, at your web
server, nullifying the need for any ruby code in the first place.
Cucumber works, too. "There's more than one way to kill a cat than by
stuffing it with butter."
Pat