2014-11-28 2 views
2

Rails 앱에서 rspec을 통해 호출 할 때만 VCR을 활성화하는 방법이 있습니까? 그것은 내 테스트에 훌륭하게 작동하지만, 테스트가 아닌 곳에서도 요청을 가로 채길 원치 않습니다.VCR을 사양으로 제한

나는 을 얻습니다. 클라이언트를 사용하여 내 앱에 연결하고 앱에서 외부 웹 서비스를 호출하는 경우 실제 HTTP 연결이 비활성화됩니다.

덕분에, 마크

답변

1

필자는 Rails에서 원하는대로이 작업을 마침내 얻었습니다. 나는 rspec을 돌리고있을 때를 제외하고는 VCR (WebMock, 실제로는 VCR에서 선택한 백엔드)을 비활성화 할 수있었습니다. 배경으로 VCR을 설치할 때 처음에 지침 here을 따랐습니다.

첫째, config/initializers/webmock.rb 만들 :

# Disable WebMock globally so it doesn't interfere with calls outside of the specs. 
WebMock.disable! 

그럼 내가 추가 한 spec_helper.rb 주위 다음 VCR.use_cassette() (내 경우에는이입니다. 사람

+0

웹 모빌 및/또는 VC 비활성화 R은 비 테스트 환경에서 작동하지만 훨씬 나은 방법은 테스트 환경에서 웹 모크와 VCR 만로드하는 것입니다. 비 테스트 환경에서로드 할 이유가 없습니다. –

+0

문제는 내 개발 환경에서 코드 타사 서비스를 사용해야한다는 것입니다.이 경우 지불 게이트웨이의 샌드 박스입니다. 나는 아직도이 환경을 개발하면서 테스트를 작성하고 싶다. 기본적으로 VCR/WebMock에서는 전부 또는 아닌 것으로 보입니다. – marcantonio

+0

VCR/WebMock을 레일 개발 환경에로드하거나로드하지 않는 것은 레일스 테스트 환경에서 지불 게이트웨이의 샌드 박스에 영향을 미치는 테스트 작성 기능과 아무 관련이 없습니다. 원래 질문은 "테스트가 아닌 경우 요청을 가로 채지 않기를 원합니다"라고 말합니다. VCR/WebMock을 비 테스트 레일 환경에서 활성화하지 않으려는 것처럼 들립니다. 그렇다면로드하지 않는 것이 가장 좋은 방법입니다. 그게 사실이 아니라면, 나는 당신이 무엇을 요구하고 있는지 전혀 모른다. –

2

은 당신의 VCR gem

# Gemfile 
group :test do 
    ...... 
    gem 'vcr' 
end 

더 많은 도움을 http://natashatherobot.com/vcr-gem-rails-rspec/을 살펴 적절한 그룹에 설정되어 있는지 만드는 것이.

+0

을하는 데 도움이

config.around(:each, :vcr) do |example| name = example.metadata[:full_description].split(/\s+/, 2).join("/").underscore.gsub(/[^\w\/]+/, "_") options = example.metadata.slice(:record, :match_requests_on).except(:example_group) + # Only enable WebMock for the specs. Don't interfere with calls outside of this. + WebMock.enable! VCR.use_cassette(name, options) { example.call } + WebMock.disable! end

희망 이것은 받아 들여진 응답이어야합니다. – DickieBoy