2014-10-16 2 views
0

Учитывая следующий контроллер:Запрос спецификаций: как создать нового пользователя через запрос POST?

class UsersController < ApplicationController 
     include ActionController::ImplicitRender 
     include ActionController::ParamsWrapper 

     wrap_parameters format: :json 
     # POST /users 
     # POST /users.json 
     def create 
     #@user = User.new(params[:user]) 
     @user = User.new(user_params) 

     if @user.save 
      render json: @user, status: :created, location: @user 
     else 
      render json: @user.errors, status: :unprocessable_entity 
     end 
     end 

     private 

     def user_params 
      params.require(:user).permit(:name, :email) 
     end 
end 

Я могу создать новый пользователь, отправив запрос HTTP POST с CURL:

curl -H "Content-Type: application/json" -d '{"name":"xyz","email":"[email protected]"}' http://myrailsapp.dev/users 

Как бы я крафт запроса SPEC соответственно?

# spec/requests/users_spec.rb 
    describe "POST /users" do 
    it "should create a new user" do 

     # FILL ME IN 

     expect(response).to have_http_status(200) 
    end 
    end 

Моя первая идея состояла в том, чтобы добавить следующее:

post users_path, body: '{"name":"xyz","email":"[email protected]"}' 

который приводит в состояние HTTP 400.

+0

http://stackoverflow.com/questions/14775998/posting-raw-json-data-with-rails-3-2-11-and -rspec –

+0

, который зафиксировал его. Если вы напишете это как ответ, я приму это. – jottr

+0

yes its down there –

ответ

2

Вот ваш ответ:

post users_path, :user => {"name":"xyz","email":"[email protected]"}, { 'CONTENT_TYPE' => 'application/json'} 
+0

Я только что заметил, что это приводит к ошибке: 'синтаксическая ошибка, неожиданная ':', expecting => (SyntaxError) ... post users_path, user: {" name ":" xyz "," email " : "[email protected] ...' Также см. комментарии по моему вопросу для refernce. – jottr

+0

Обновлено, должно быть хорошо сейчас –

+0

Нет проблемы. – jottr

0

Проблема находится в пределах заголовков, вам нужно, чтобы гарантировать, что указывает JSON содержание!

post users_path, '{"name":"xyz","email":"[email protected]"}' , { 'CONTENT_TYPE' => 'application/json', 'ACCEPT' => 'application/json' } 

Надейтесь, что работает на вас! Cheers, Jan

+0

Thx Jan. Toms комментарий выше фактически исправил его. – jottr

+0

Отлично! Рад, что мы это убрали! – jfornoff

Смежные вопросы