Как проверить ответ JSON с помощью RSpec?

Вам нужен модифицированный синглтон. См. Это - те же OOPS (шаблоны проектирования)

139
задан Fizz 1 March 2011 в 20:23
поделиться

1 ответ

Много вышеупомянутых ответов немного устарело, таким образом, это - быстрая сводка для более поздней версии RSpec (3.8 +). Это решение не повышает предупреждений от rubocop-rspec и встроено с rspec лучшие практики :

А успешный ответ JSON определяется двумя вещами:

  1. тип контента ответа application/json
  2. , орган по ответу может быть проанализирован без ошибок

Предположение, что объект ответа является анонимным предметом теста, оба из вышеупомянутых условий могут быть, проверяют использование, которое Rspec создал в matchers:

context 'when response is received' do
  subject { response }

  # check for a successful JSON response
  it { is_expected.to have_attributes(content_type: include('application/json')) }
  it { is_expected.to have_attributes(body: satisfy { |v| JSON.parse(v) }) }

  # validates OP's condition
  it { is_expected.to satisfy { |v| JSON.parse(v.body).key?('success') }
  it { is_expected.to satisfy { |v| JSON.parse(v.body)['success'] == true }
end

, Если Вы готовы назвать свой предмет затем, вышеупомянутые тесты могут быть упрощены далее:

context 'when response is received' do
  subject(:response) { response }

  it 'responds with a valid content type' do
    expect(response.content_type).to include('application/json')
  end

  it 'responds with a valid json object' do
    expect { JSON.parse(response.body) }.not_to raise_error
  end

  it 'validates OPs condition' do
    expect(JSON.parse(response.body, symoblize_names: true))
      .to include(success: true)
  end
end
0
ответ дан 23 November 2019 в 23:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: