В настоящее время я создаю JSON API, работающий на Rails/rails-api. У меня есть маршрут, который принимает JSON-send через запрос PATCH и перед фильтром, который нуждается в доступе к необработанному запросу/JSON.Функциональное тестирование API JSON Rails
Для тестирования я добавил следующее перед фильтром, чтобы показать мою проблему:
before_filter do
puts "Raw Post: #{request.raw_post.inspect}"
puts "Params: #{params.inspect}"
end
Следующая локон запрос работает по назначению:
curl -X PATCH -H "Content-Type: application/json" -d '{"key":"value"}' http://localhost:3000/update
# Raw Post: "{\"key\":\"value\"}"
# Params: {"key"=>"value", "action"=>"update", "controller"=>"posts"}
Однако я негоден этот метод, ни один из следующих звонков:
Params включены, но не как JSON переданы
test 'passing hash' do patch :update, { key: "value" } end # Raw Post: "key=value" # Params: {"key"=>"value", "controller"=>"posts", "action"=>"update"}
Params включен, но опять не как JSON переданы
test 'passing hash, setting the format' do patch :update, { key: "value" }, format: :json end # Raw Post: "key=value" # Params: {"key"=>"value", "controller"=>"posts", "action"=>"update", "format"=>"json"}
формате JSON, но не включены в Params
test 'passing JSON' do patch :update, { key: "value" }.to_json end # Raw Post: "{\"key\":\"value\"}" # Params: {"controller"=>"posts", "action"=>"update"}
формат JSON, но не включенные в Params
test 'passing JSON, setting format' do patch :update, { key: "value" }.to_json, format: :json end # Raw Post: "{\"key\":\"value\"}" # Params: {"format"=>"json", "controller"=>"posts", "action"=>"update"}
Этот список еще больше, я просто хотел показать вам мою проблему. Я тестировал установку как Accept
, так и Content-Type
заголовков на application/json
тоже, ничего не помогает. Я что-то делаю неправильно, или это ошибка в функциональных тестах Rails?
Я отмечу это как ответ, потому что это лучший способ обойти эту проблему. Извлеченный урок: не используйте функциональные тесты вообще, пройдите полные интеграционные тесты. –