Спецификация запроса: как создать нового пользователя с помощью 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/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.


person jottr    schedule 16.10.2014    source источник
comment
stackoverflow.com/questions/14775998/   -  person Tom Hert    schedule 17.10.2014
comment
это исправило. Если вы напишите это в качестве ответа, я приму это.   -  person jottr    schedule 17.10.2014
comment
На самом деле ваш первый комментарий (который вы, к сожалению, удалили) был рабочим ответом: `post users_path, user: {name: Test, email: [email protected]}` Кажется, нет необходимости передавать CONTENT_TYPE.   -  person jottr    schedule 17.10.2014
comment
потому что после этого я нашел тот же вопрос, просто связал его и пометил ваши вопросы как двуличие.   -  person Tom Hert    schedule 17.10.2014


Ответы (2)


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

post users_path, :user => {"name":"xyz","email":"[email protected]"}, { 'CONTENT_TYPE' => 'application/json'}
person Tom Hert    schedule 16.10.2014
comment
Я только что заметил, что это приводит к ошибке: syntax error, unexpected ':', expecting => (SyntaxError) ...post users_path, user: {"name":"xyz","email":"[email protected]... Также смотрите комментарии под моим вопросом для справки. - person jottr; 17.10.2014
comment
Обновил, теперь должно быть нормально - person Tom Hert; 17.10.2014
comment
Неа. Проблема остается. - person jottr; 17.10.2014

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

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

Надеюсь, это сработает для вас! Привет, Ян

person jfornoff    schedule 16.10.2014
comment
Спасибо, январь. Комментарий Тома выше фактически исправил это. - person jottr; 17.10.2014
comment
Большой! Рад, что мы избавились от этого! - person jfornoff; 17.10.2014