stackow1
stackow1

Reputation: 311

RSpec test redirect

please help check the redirect. i have controller:

def create
  @poll = current_user.polls.build(poll_params)

  if @poll.save      
    flash[:success] = 'Голосование создано'
    redirect_to user_polls_path(current_user)
  else
    flash.now[:error] = 'Голосование не создано'
    @user = User.find(params[:user_id])
    render 'new'
  end
end

spec/requests/polls_spec.rb:

require 'rails_helper'

RSpec.describe "Polls", type: :request do
  describe "return check" do
    it "#create" do
      @user = FactoryGirl.create(:user)
      @poll = FactoryGirl.create(:poll, user: @user)
      # binding.pry #@user OK, @poll OK
      expect(@poll).to redirect_to(user_polls_path @user)
    end            
  end
end

but after run in console i get folloew error message:

$ rspec spec/requests
...F
Failures:
  1) Polls return 200 status code for GET /polls #create
     Failure/Error: expect(@poll.save).to redirect_to(user_polls_path @user)
     NoMethodError:
       undefined method `response_code' for nil:NilClass

Upvotes: 3

Views: 659

Answers (1)

Mihai Dinculescu
Mihai Dinculescu

Reputation: 20033

Use

expect(response).to redirect_to(user_polls_path @user)

What redirect_to does behind the scenes is to check the response_code property of the object used in expect.

This is why you are getting the undefined method 'response_code' for nil:NilClass error.

Upvotes: 1

Related Questions