簡體   English   中英

如何使用 RSpec 測試 PUT/PATCH API

[英]How to test PUT/PATCH API with RSpec

我正在嘗試從我的 API 測試一些 PUT/PATCH 端點,但我的“record_to_update”沒有按預期進行。

我使用 Rails 5.2 和 RSpec 3.8 組織規范如下:

require 'rails_helper'

RSpec.describe UsersController, type: :controller do
  context 'when request with no valid headers' do
    ...
    ...
    ...
  end

  context 'when resquest with valid headers' do
    before do
      request.accept = 'application/vnd.api+json'
      request.content_type = 'application/vnd.api+json'

      2.times do
        create(:user)
      end
    end

    describe 'PATCH/PUT /users/:id' do
      let(:record_to_update) { create(:user) }
      let(:user_params) do
        { id: first_user.id, name: 'goku', email: 'goku@bol.com' }
      end

      before do
        put :update, params: { id: record_to_update, user: user_params }
        record_to_update.reload
      end

      it 'should update user' do
        expect(record_to_update.name).to eq('goku')
        expect(response.status).to eq 200
      end
    end
  end
end

正如我所說的,我在這里面臨的問題是“record_to_update”沒有更新。 我已經用 Postman 在同一個 API 中測試了同一個 PUT/PATCH 端點,並從那里成功更新。 我在這里做錯了什么?

提前致謝。

您應該將before的塊移動到it 'should update user'

  before do
    put :update, params: { id: record_to_update.id, user: user_params }

  end

所以它變成

it 'update user' do
  put :update, params: { id: record_to_update, user: user_params }
  expect ...
  record.reload!
....
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM