Используйте патч с тестами RSPE c - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь проверить исправление для разработки пользовательской информации с помощью Rspe c, URL обновления выглядит так # PATCH/PUT /api/users/1, но я получаю эту ошибку для всех следующих случаев

Ошибка ArgumentError: wrong number of arguments (given 2, expected 1)

Случаи, которые я пробовал

patch :update, {'id'=> @api_user['user']['id'], 'user' => attributes_for(:normal_user)}

patch :update, 'id'=> @api_user['user']['id'], 'user' => attributes_for(:normal_user)

patch :update, 'id'=> @api_user['user']['id'], :params => {'user' => attributes_for(:normal_user)}

И я попробовал это patch :update, :params => {'user' => create(:normal_user)}. # у этого есть идентификатор в

, но выдает эту ошибку

No route matches {:action=>"update", :controller=>"api/users", :user=>#<User id: 227794695, email: "test11@example.com", created_at: "2020-05-03 08:51:55", updated_at: "2020-05-03 08:51:55", is_admin: nil, first_name: "test", last_name: "test">}, которая имеет смысл, URL должен быть update/id

1 Ответ

0 голосов
/ 03 мая 2020

Вы не должны ставить «обновление» после патча, так как сам патч автоматически направит обновление на пользовательский контроллер

Это сообщение об ошибке причины, сообщенное вам, учитывая 2, ожидаемых 1 аргумента

вот образец для вашей справки из обновления

require 'rails_helper'

RSpec.describe 'User request', type: :request do
  it 'should update user email' do
    patch "/api/users/#{@api_user['user']['id']}",
          params: {
            user: {
              email: 'new_email_address@gmail.com'
            }
          },
          as: :json
    expect(response).to have_http_status(:success)
  end
end

вот пример /config/routes.rb для вашей справки по обновлению пользователей

Rails.application.routes.draw do
  namespace :api, defaults: { format: :json } do
    resources :users, only: [:create, :update, :destroy]
  end
end
...