проверить несколько URL-адресов во вложенных общих примерах rspec - PullRequest
0 голосов
/ 15 ноября 2018

Итак, я настраиваю 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, поэтому я немного застрял. Буду признателен за любые советы по реструктуризации моих тестов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...