Пользовательские параметры соответствия запроса видеомагнитофона для некоторых конкретных тестов RSpec - PullRequest
0 голосов
/ 01 июня 2018

У меня есть несколько тестов RSpec в моем проекте Rails, которые проверяют HTTP-вызовы внешнего REST API и используют кассеты VCR для записи запросов и ответов.В настоящее время моя конфигурация видеомагнитофона выглядит следующим образом:

VCR.configure do |c|
  c.cassette_library_dir = 'spec/vcr_cassettes'
  c.hook_into :webmock
  c.configure_rspec_metadata!
end

Таким образом, правило сопоставления запросов совпадает только для метода HTTP и URI.Я хочу изменить этот параметр, чтобы он также соответствовал телу запроса:

VCR.configure do |c|
  c.cassette_library_dir = 'spec/vcr_cassettes'
  c.hook_into :webmock
  c.configure_rspec_metadata!
  c.default_cassette_options = {
    :match_requests_on => [:uri, :method, :body],
  }
end

, но так как у меня уже есть много тестов в моем проекте, я хотел бы сделать это постепенно, активируя это новое ограничение только для некоторых изтесты, так что остальные (со старыми кассетами) не сломаются.

Есть ли способ передать параметр в тесты RSpec, чтобы иметь пользовательское правило сопоставления запросов только для некоторых конкретных тестов или групп тестов?

Я представляю что-то вроде

it 'reverts transaction', :vcr, :body_matching => true do
    # something
end

и затем динамически меняю настройки в соответствии с параметром body_matching.

1 Ответ

0 голосов
/ 02 июня 2018

Метаданным :vcr можно присвоить хэш опций, которые будут использоваться для вставленной кассеты.Поэтому вы можете сделать

it 'reverts transaction', vcr: { :match_requests_on => [:uri, :method, :body] } do
  # something
end

Чтобы сделать его лучше, вы можете присвоить этот хэш переменной, а затем просто установить для нее значение :vcr.Если вы хотите пойти дальше, чем вам нужно было бы создать свой собственный RSpec до / после установки, отсеять свое собственное имя метаданных, а затем не включать :vcr в метаданные (так как вам нужно будет сделать свой собственный вызов (insert_cassette)),Смотрите https://github.com/vcr/vcr/blob/31e2cba76c0c9a60c3de5d5ece1c87563bfeacf7/lib/vcr/test_frameworks/rspec.rb#L32, чтобы узнать, как установить видеомагнитофон до / после подключения.

...