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