Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Testing controller's redirect in RSpec

I have a rspec test testing a controller action.

class SalesController < ApplicationController
  def create
    # This redirect sends the user to SalesController#go_to_home
    redirect_to '/go_to_home'
  end

  def go_to_home
    redirect_to '/'
  end
end

My controller test looks like

RSpec.describe SalesController, type: :controller do
  include PathsHelper

  describe 'POST create' do
    post :create

    expect(response).to redirect_to '/'
  end
end

However, when I run the test it tells me that:

   Expected response to be a redirect to <http://test.host/> but was a redirect to <http://test.host/go_to_home>.
   Expected "http://test.host/" to be === "http://test.host/go_to_home".

/go_to_home will send the user to SalesController#go_to_home. How can I test that the response will eventually lead to the home page with the url http://test.host/?

like image 473
thank_you Avatar asked Feb 25 '26 05:02

thank_you


1 Answers

Why are you expecting to be redirect to '/' in the specs? From the controller code you pasted you are going to be redirected to '/go_to_home' after hitting the create action

Try changing the specs to:

expect(response).to redirect_to '/go_to_home'

Edit:

Is this a real example or the code is just for sharing what you are trying to achieve? I don't think rspec will follow the redirect after going to '/go_to_home' and I think is fine.

If you are testing the create action it's ok to test that redirects to '/go_to_home' because that's what action is doing. Then you can do another test for the other action go_to_home and expect that redirects to root.

Are you calling the action 'go_to_home' from somewhere else?

like image 70
rodeleon Avatar answered Feb 26 '26 20:02

rodeleon