Spesifikasi permintaan: Bagaimana cara membuat pengguna baru melalui permintaan POST?

Diberikan pengontrol berikut:

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

Saya dapat membuat pengguna baru dengan mengirimkan permintaan HTTP POST dengan CURL:

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

Bagaimana cara saya menyusun spesifikasi permintaan yang sesuai?

  # 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

Ide pertama saya adalah menambahkan yang berikut ini:

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

yang menghasilkan status HTTP 400.


person jottr    schedule 16.10.2014    source sumber
comment
stackoverflow.com/questions/14775998/   -  person Tom Hert    schedule 17.10.2014
comment
itu memperbaikinya. Jika Anda menulisnya sebagai balasan, saya akan menerimanya.   -  person jottr    schedule 17.10.2014
comment
Sebenarnya komentar pertama Anda, (yang sayangnya Anda hapus) adalah jawaban yang berfungsi: ` posting jalur_pengguna, pengguna: {nama: Tes, email: [email protected] }` Tampaknya tidak perlu melewati CONTENT_TYPE.   -  person jottr    schedule 17.10.2014
comment
karena setelah itu saya menemukan pertanyaan yang sama, cukup tautkan dan tandai pertanyaan Anda sebagai bermuka dua.   -  person Tom Hert    schedule 17.10.2014


Jawaban (2)


Inilah jawaban Anda:

post users_path, :user => {"name":"xyz","email":"[email protected]"}, { 'CONTENT_TYPE' => 'application/json'}
person Tom Hert    schedule 16.10.2014
comment
Saya baru menyadari, bahwa ini menghasilkan kesalahan: syntax error, unexpected ':', expecting => (SyntaxError) ...post users_path, user: {"name":"xyz","email":"[email protected]... Lihat juga komentar di bawah pertanyaan saya untuk referensi. - person jottr; 17.10.2014
comment
Diperbarui, seharusnya baik-baik saja sekarang - person Tom Hert; 17.10.2014
comment
Tidak. Masalah masih ada. - person jottr; 17.10.2014

Masalahnya ada di dalam header, Anda perlu memastikannya menentukan konten JSON!

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

Semoga itu berhasil untuk Anda! Selamat, Jan

person jfornoff    schedule 16.10.2014
comment
Terima kasih Jan. Komentar Tom di atas benar-benar memperbaikinya. - person jottr; 17.10.2014
comment
Besar! Senang kita berhasil menghindarinya! - person jfornoff; 17.10.2014