RSpec请求示例失败

时间:2014-06-12 19:00:17

标签: ruby-on-rails rspec request integration-testing

我正在尝试制作一个非常简单的请求规范来测试我的应用程序中的API方法。现在,当我应该通过此测试获得200消息时,我收到了302消息。

规范:

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 

工厂:

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

控制器方法:

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

我错过了什么?

2 个答案:

答案 0 :(得分:1)

所以你需要进行异步发布请求,它应该是类似下面的内容,

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

试试这个,它可能会起作用

答案 1 :(得分:0)

要解决此问题,我需要在我的请求中添加ACCEPT标头,如下所示:

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

这样做解决了服务器没有将请求解释为期望json的问题。