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
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.
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.
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
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.