Вы можете использовать AssertJson gem для хорошего DSL, который позволяет вам проверять ключи и значения, которые должны присутствовать в вашем ответе JSON.
Добавьте драгоценный камень к вашему Gemfile
:
group :test do
gem 'assert_json'
end
Это быстрый пример того, как может выглядеть ваш функциональный тест / тест контроллера (пример является адаптацией их README ):
class ExampleControllerTest < ActionController::TestCase
include AssertJson
def test_my_action
get :my_action, :format => 'json'
# => @response.body= '{"key":[{"inner_key":"value1"}]}'
assert_json(@response.body) do
has 'key' do
has 'inner_key', 'value1'
end
has_not 'key_not_included'
end
end
end
Вам просто нужно включить модуль AssertJson
в свой тест и использовать блок assert_json
, где вы можете проверить ответ для существующих и несуществующих ключей и значений. Подсказка: это не сразу видно в README , но чтобы проверить значение (например, если ваше действие просто возвращает массив строк), вы можете сделать
def test_my_action
get :my_action, :format => 'json'
# => @response.body= '["value1", "value2"]'
assert_json(@response.body) do
has 'value1'
has 'value2'
has_not 'value3'
end
end