8vius
8vius

Reputation: 5836

RSpec request example failing

I'm trying to do a really simple request spec for testing my API methods in my application. Right now I'm getting 302 message when I should be getting 200 with this test.

The spec:

require 'spec_helper'

describe UsersController do
  describe "#create" do
    it "creates a new user " do
      post '/users', user: FactoryGirl.attributes_for(:user)
      expect(response.status).to eq 200
    end
  end
end 

The factory:

FactoryGirl.define do
  factory :user do
    sequence(:name)  { |n| "Person #{n}" }
    sequence(:username) { |n| "Person#{n}" } 
    sequence(:email) { |n| "person_#{n}@example.com"}
    password "foobar"
    password_confirmation "foobar"
  end
end

The controller method:

def create
  @user = User.new(user_params)

  respond_to do |format|
    if @user.save
      format.html { redirect_to @user, notice: 'User was successfully created.' }
      format.json { render :show, status: :created, location: @user }
    else
      format.html { render :new }
      format.json { render json: @user.errors, status: :unprocessable_entity }
    end
  end
end

What am I missing?

Upvotes: 0

Views: 269

Answers (2)

8vius
8vius

Reputation: 5836

To solve the issue I need to add the ACCEPT header to my request, like so:

post "/users", { user: @user } , { accept: 'application/json' }

Doing this fixed the issue which was the server not interpreting the request as expecting json in return.

Upvotes: 0

Mohanraj
Mohanraj

Reputation: 4220

So you need to make the asynchronous post request, it should be something like below,

it "creates a new user " do
  xhr :post, '/users', user: FactoryGirl.attributes_for(:user)
  expect(response.status).to eq 200
end

Try this, it might work

Upvotes: 1

Related Questions