удаление кассеты видеомагнитофона не приводит к сбою RSpec

У меня возникли проблемы с тем, чтобы видеомагнитофон перезаписывал кассеты, поэтому я попытался полностью удалить кассету и был потрясен, обнаружив, что мой набор тестов продолжает проходить. Как это возможно? Насколько я понимаю, кассеты — это приспособления, используемые для имитации внешних вызовов API. Без них он должен фактически попасть в API и сохранить новую кассету. Вот мой vcr.rb

require 'vcr'

VCR.configure do |c|
  c.cassette_library_dir = 'spec/fixtures/vcr'
  c.hook_into :webmock
  c.default_cassette_options = { serialize_with: :json, record: :once }
  c.debug_logger = File.open(Rails.root.join('log', 'vcr.log'), 'a')
  c.filter_sensitive_data('---WUNDERGROUND_KEY---') { ENV['WUNDERGROUND_KEY'] }
end

Вот один из загадочно проходящих тестов:

require 'spec_helper'

describe WeatherMan do
  describe ".current_outdoor_temp" do
    it "returns current outdoor temperature from Wunderground API" do
      VCR.use_cassette('wunderground') do
        temperature = WeatherMan.current_outdoor_temp(10004, 0)
        expect(temperature).to be_a Numeric
      end
    end
  end
end

person williamcodes    schedule 19.01.2016    source источник


Ответы (2)


Я полагаю, что вы правильно понимаете, что если вы удалите свои кассеты, ваш тестовый набор попадет в настоящий API и воссоздаст кассеты. Возможно, ваши спецификации не соответствуют действительности, потому что Wunderground API возвращает правильные результаты!

Помните, что VCR — это инструмент, который избавляет нас от необходимости обращаться к реальному API, чтобы выполнить наши спецификации. Обращение к реальному API — это просто действенный способ добиться соответствия нашим спецификациям. Недостатками здесь являются время (требуется время для обращения к внешним службам) и необходимость подключения к Интернету для запуска набора тестов.

Есть ли у вас основания полагать, что если ваш набор тестов совпадет с реальным API Wunderground, ваши спецификации не сработают?

person harimohanraj    schedule 20.01.2016

Я использовал кеш Rails, чтобы не обращаться к API с одним и тем же запросом несколько раз в процессе производства, и по умолчанию Rails использует :file_store, который сохраняется на диске, а не в памяти, и RSpec не очищает его за вас. В результате я никогда не нажимал VCR, WebMock или свои кассеты. В первый раз, когда я запустил набор тестов, он кэшировал мои результаты в хранилище файлов и больше никогда их не использовал. Вы можете перезагрузить весь компьютер, и это не имеет значения. Это может вас укусить, если вы привыкли к кэшированию в памяти. Добавление этого к spec/spec_helper.rb устранило проблему:

RSpec.configure do |config|
  ...
  config.before(:each) do
    Rails.cache.clear
  end
  ...
end
person williamcodes    schedule 23.01.2016