来自 RSpec 的意外 status_code

Unexpected status_code from RSpec

我正在为 API 编写规范。但是响应以 :created 状态返回,而它应该是 :unprocessable_entity.

announcements_controller

  def update
    head :unprocessable_entity unless announcement
    if annnouncement.update(announcement_params)
      render json: annoucement, status: :ok
    else
      render_unprocessable_entity
    end
  end

  def announcement
    Announcement.find(params[id])
  end

announcements_controller_规格

it 'fails when announcement does not exists' do
  data = {
    id: 999_999,
    announcement: {
      body: ''
    }
  }.to_json
  post "/api/announcements/#{property.slug}", params: data, headers: headers
  expect(response).to have_http_status(:unprocessable_entity)
end

失败响应

  1) Api::AnnouncementsController#update fails when announcement does not exists
     Failure/Error: expect(response).to have_http_status(:unprocessable_entity)
       expected the response to have status code :unprocessable_entity (422) but it was :created (201)

您使用 post 而不是 put。因此,请求被路由到 #create 控制器操作 no 到 #update,如你所愿。

顺便说一句,你写:

Announcement.find(params[id])

少了一个冒号:

Announcement.find(params[:id])