Функциональное тестирование: обновление действия JSON API в Rails 4

Я долго с этим боролся, пытался кто знает сколько комбинаций - безрезультатно. Похоже, некоторые другие на SO и Google не смогли решить эту проблему.

По сути, я отправляю сообщение:update на мой контроллер в рамках встроенной функциональной системы тестирования Rails 4. Мое приложение строго JSON API, поэтому мне нужно опубликовать запрос:update как запрос JSON. Все отлично работает в дикой природе, но синтаксис функционального теста не может понять, что мне нужно.

Вот моя текущая попытка:

test "should be able to update location" do

  post :update, id: 1, format: :json, '{"is_private": "false"}'

  get :show, id: 1, format: :json
  assert_equal json['data'][0]['is_private'], false

end

Запуск теста rake приводит к синтаксической ошибке:

unexpected '\n', expecting =>

Для ясности, мое действие контроллера выглядит так:

def update
  @location = Location.find(params[:id])
  if @location.update_attributes(ActiveSupport::JSON.decode(request.body.read))
    api_response(@location)
  else
    respond_with api_error
  end
end

Что мне здесь не хватает? Можно ли даже протестировать сообщения JSON с помощью встроенной в Rails 4 функциональной среды тестирования? Официальная документация довольно краткая по этому вопросу.

1 ответ

Решение

Программирование резиновой утки действительно работает. Я разобрался в этом:

test "should be able to update location" do

  update = { is_private: false }.to_json
  patch(:update, update, id: 1)

  get :show, id: 1, format: :json
  assert_equal json['data'][0]['is_private'], false

end
Другие вопросы по тегам