Как проверить PUT / PATCH API с помощью RSpec - PullRequest
1 голос
/ 30 октября 2019

Я пытаюсь протестировать некоторую конечную точку PUT / PATCH из моего API, но мой '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' не выполняется. Я уже тестировал ту же конечную точку PUT / PATCH в том же API с Postman и успешно обновил ее. Что я тут не так делаю?

Заранее спасибо.

1 Ответ

2 голосов
/ 30 октября 2019

Вы должны переместить блок 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...