如何使用RSpec测试PUT / PATCH API

时间:2019-10-30 13:29:29

标签: ruby-on-rails api 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端点,并从那里成功进行了更新。我在这里做什么错了?

谢谢。

1 个答案:

答案 0 :(得分:2)

您应将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
相关问题