1

Я работаю над приложением, и до этого момента я тестировал такие вещи, как аутентификация и коды ответов на запрос. но, похоже, неплохо проверить структуру полезной нагрузки. то есть. если есть встроенные ресурсы или ресурсы sidloaded. как вы, ребята, проверяете это. вот пример некоторых тестов, которые я делаю. Я использую активные сериализаторы моделей. но, похоже, немного круто организовать.Что такое лучшая практика для тестирования контроллеров api (активные сериализаторы модели)?

describe '#index' do 
    it 'should return an array of email templates' do 
    template = EmailTemplate.new(name: 'new email template') 
    EmailTemplate.stub(:all).and_return([template]) 
    get :index 
    payload = {:email_templates => [JSON.parse(response.body)["email_templates"][0].symbolize_keys]} 
    template_as_json_payload = {:email_templates => [ActiveModel::SerializableResource.new(template).as_json[:email_template] ]} 
    expect(payload).to eq(template_as_json_payload) 
    end 
end 

ответ

0

Я люблю определение схемы для ответов JSON и проверки того, что любой ответ видели в тесте соответствует ему. Это само по себе не гарантирует правильности значений ответа, но это говорит о том, что структура ответа соответствует вашим ожиданиям.

Эти схемы затем становятся частью документации API, которые могут ссылаться на реализации клиента. Используя схему в тестах, я получаю больше уверенности в том, что документация по API не будет выпадать из синхронизации с реализацией. Создание изменений схемы для получения теста прохождения также является хорошим моментом для рассмотрения вопроса о том, безопасно ли изменение для существующих клиентов API или мне нужно выпустить новую версию API.

Людей в Thoughtbot есть хороший пример проверки схем с помощью RSpec: https://robots.thoughtbot.com/validating-json-schemas-with-an-rspec-matcher

0

Это один из способов сделать это:

body = JSON.parse(response.body) 
assert_equal(body.keys, ["id", "author"]) 
assert_equal(body["author"].keys, ["id", "name"]) 

Но вы должны оформить ссылку, Ионов совместно, это стоит прочитать.