Вам нужен модифицированный синглтон. См. Это - те же OOPS (шаблоны проектирования)
Много вышеупомянутых ответов немного устарело, таким образом, это - быстрая сводка для более поздней версии RSpec (3.8 +). Это решение не повышает предупреждений от rubocop-rspec и встроено с rspec лучшие практики :
А успешный ответ JSON определяется двумя вещами:
application/json
Предположение, что объект ответа является анонимным предметом теста, оба из вышеупомянутых условий могут быть, проверяют использование, которое 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