Функциональное тестирование: действие обновления 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 test приводит к синтаксической ошибке:

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? Официальная документация довольно кратка по этому вопросу.


person TC Schiller    schedule 08.10.2014    source источник


Ответы (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
person TC Schiller    schedule 08.10.2014