Итак, я настраиваю rspec на не проверенной базе кода. Я начинаю с тестирования конечных точек. Я очень полагаюсь на общий пример с СУХОЙ. Моя установка работала хорошо, как следует: (упрощено для удобства чтения)
describe Api::V2::EventsController, type: :api do
let(:type) { 'events' }
let(:instance_trait) { :with_events }
let(:record_count_transiant) { :events_count }
subject { controller }
it_behaves_like 'index'
end
RSpec.shared_examples 'index' do
context 'index without data' do
it_behaves_like 'empty_index'
end
end
RSpec.shared_examples 'empty_index' do
let(:instance) { create :instance }
before do
get "/api/v2/#{instance.slug}/#{type}"
end
it 'responds with success status' do
expect(last_response.status).to eq 200
end
end
Но сегодня я попытался протестировать вложенные индексы. Моя проблема в том, что ссылки на тесты умножаются для shared_examples, поэтому я не могу использовать ту же логику выполнения запроса в предыдущем, потому что last_response будет последним ответом (да).
Моя первая попытка состояла в том, чтобы просмотреть URL-адреса в блоке it следующим образом:
it 'responds with success status' do
parent_types.each do |parent_type|
get "/api/v2/#{instance.slug}/#{parent_type}/#{instance.send(parent_type).first.uuid}/#{type}"
expect(last_response.status).to eq 200
end
end
, который не работает, потому что запрос, по-видимому, не закончился, когда ожидаемое ожидание.
Итак, моя вторая попытка заключалась в цикле в родительском общем примере и передаче URL в качестве переменной:
RSpec.shared_examples 'nested_index' do
context 'index without data' do
it 'is nested in shows' do
parent_types.each do |parent_type, parent_config|
instance = create :instance, parent_config[:trait]
url = "/api/v2/#{instance.slug}/#{parent_type}/#{instance.send(parent_type).first.uuid}/#{type}"
it_behaves_like 'empty_nested_index', url
end
end
end
end
но я получаю ошибку: it_behaves_like
недоступно из примера. (например, it
блок)
И я не могу получить доступ к переменной let, если я не в блоке it, поэтому я немного застрял. Буду признателен за любые советы по реструктуризации моих тестов.