В прошлом я обрабатывал что-то подобное, настраивая его из файла rails_helper.
В вашем блоке Rspec.configure
вы можете получить подробную информацию о каждой запущенной функции c и изменить ее. вещи до, около или после запуска каждого примера spe c. Это позволило мне иметь хороший DSL, который позволяет мне указывать имя кассеты как тег vcr
. Так что в вашем случае это может стать:
scenario "by searching via a title", vcr: :search_title do
visit root_path
fill_in "search", with: "cheddar"
find(".search-btn").click
expect(page).to have_content(/White Cheddar/)
end
scenario "by searching via a description", vcr: :search_description do
visit root_path
fill_in "search", with: "cheddar"
select "Description", from: "search_field"
find(".search-btn").click
expect(page).to have_content(/White Cheddars Are Scarce/)
end
Изменения, которые я должен был сделать, чтобы сделать эту работу, были в файле rails_helper:
RSpec.configure do |c|
c.around(:each, :vcr) do |example|
name = Array(example.metadata.dig(:vcr)).join
options = example.metadata.slice(:record, :match_requests_on)
VCR.use_cassette(name, options) { example.call }
end
end
Для каждого задания * Пример 1017 * с тегом vcr, возьмите метаданные spe c и извлеките все, что хранится в теге vcr, в качестве имени кассеты. Остальные строки просто активируют видеомагнитофон только для спецификаций, имеющих тег VCR. Вы можете узнать больше о том, почему я сделал это из этого эпизода Railscast