Hi David, First, using the controller doesn't work also :)
After some debugging here i found out why it was trowing the error, the RedirectTo matcher uses the ActionController::Routing::Routes.recognize_path method to discover if a path exists and this method takes two parameters, the path and the "environment" that the path is being requested. When my code was being matched, the redirect_to matcher generated the right path "/pages/test" and sent it two the recognize_path method, but this path is a Restful one and only GET, PUT and DELETEs are allowed and the RedirectTo matcher didn't send any :method param, so when the path is being recognized and no method is sent it will never be recognized and thus that weird error is thrown. A simple way to solve this issue is change the path_hash method at the RedirectTo matcher to include the HTTP method being called: def path_hash(url) path = url.sub(%r{^\w+://[EMAIL PROTECTED], "").split("?", 2)[0] ActionController::Routing::Routes.recognize_path path, :method => :get end As you can only redirect to GET requests, this should not be a problem. Should i file a patch for this? Now, the two methods are working fine =D it 'Should redirect to the new page' do do_post response.should redirect_to( page_path( :action => 'show', :id => @static_page.permalink ) ) response.should redirect_to( :action => 'show', :id => @static_page.permalink ) end -- Maurício Linhares http://alinhavado.wordpress.com/ (pt-br) | http://codeshooter.wordpress.com/ (en) João Pessoa, PB, +55 83 8867-7208 On Fri, Feb 22, 2008 at 11:25 AM, David Chelimsky <[EMAIL PROTECTED]> wrote: > On Fri, Feb 22, 2008 at 8:10 AM, Maurício Linhares > > <[EMAIL PROTECTED]> wrote: > > > > Using the "path" method the spec passes, but i don't use the path > > method on my controller. First, here's my controller code: > > > > def create > > @static_page = @event.static_pages.build(params[:static_page]) > > > > respond_to do |format| > > if @static_page.save > > flash[:notice] = 'Page was successfully created.' > > format.html { redirect_to(:action => 'show', :id => > > @static_page.permalink ) } ## thats what i'm testing agains > > format.xml { render :xml => @static_page, :status => > > :created, :location => @static_page } > > else > > format.html { render :action => "new" } > > format.xml { render :xml => @static_page.errors, :status => > > :unprocessable_entity } > > end > > end > > end > > > > And here is the spec: > > > > > > it 'Should redirect to the new page' do > > do_post > > response.should be_redirect > > response.should redirect_to( page_path( :action => 'show', :id > > => @static_page.permalink ) ) ## this one, with the page_path goes > > fine > > > > response.should redirect_to( :action => 'show', :id => > > @static_page.permalink ) ## this one, without the page_path doesn't > > work > > end > > > > It seems that the redirect_to matcher doesn't recognize the current > controller. > > Ah. I missed that the initial example was missing the controller > because I was focused on the error message, which is obviously a red > herring. > > Try adding the controller to the hash: > > esponse.should redirect_to( :controller => 'static_pages', :action => > > 'show', :id => @static_page.permalink ) > > If that works, then please submit a bug report to the tracker (that > redirect_to does not work with action + id unless you specify the > controller). > > Thanks, > David > _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users