2016-01-19 6 views
1

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

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 

ответ

1

Я использовал кэш 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 
1

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

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

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