2012-12-02 11 views
8

Ich habe eine sehr einfache module Ich teste mit Ruby mit dem Videorecorder gem.VCR nicht Kassetten aufzeichnen

Ich habe VCR entsprechend der Dokumentation konfiguriert, aber es scheint nicht möglich zu sein, eine Kassette im Kassettenverzeichnis aufzunehmen. Ich habe sogar die Berechtigungen für das Kassettenverzeichnis auf 777 für alle Fälle geändert. Das wirklich seltsame Ding ist, ich habe das Kassettenverzeichnis komplett entfernt, die Spezifikationen ausgeführt, und dann wurde ein neues Kassettenverzeichnis erstellt.

Ich verwende Typhoeus 0.4.2 mit Hydra. Ich kann Typhoeus im Moment nicht verbessern.

Der entsprechende Code:

require 'rspec'                  
require 'vcr'                  
require_relative File.join("..", "crawl_handler")         

VCR.configure do |c|                 
    c.cassette_library_dir = "spec/vcr_cassettes"          
    c.hook_into :fakeweb                
    c.allow_http_connections_when_no_cassette = false         
end 

... # => other describe statements 
describe "#handle_http_response" do            
    before(:each) do                 
     get_some_response = lambda {             
     # NOTE: typhoeus v. 0.5 is MUCH less setup :)        
     VCR.use_cassette("bme") do             
      request = Typhoeus::Request.new("www.bing.com")       
      hydra = Typhoeus::Hydra.new            
      hydra.queue(request)              
      hydra.run                 
      response = request.response            
     end                   
     }                    
     @message = @subject.handle_http_response("www.bing.com", get_some_response.call)  
    end                    

    it "returns a message hash" do             
     @message.should be_kind_of Hash            
    end 

    ... 

Ich habe keine Ahnung, warum Kassetten werden nicht geschrieben werden.

+2

+1 für den Titel. Ich wollte als Off-Thema schließen und empfehle Ihnen, die Plattenköpfe zu reinigen (oder auf Blu-Ray zu aktualisieren), aber ich denke, Sie sprechen über Ruby-Code :) –

+0

LOL! Ich war so versessen darauf, das Problem zu lösen, dass ich das gar nicht merkte. Für dieses Problem blies ich einfach auf das Band, löste es und steckte es wieder ein. – brycemcd

Antwort

9

Das Problem ist, dass Sie Typhoeus als HTTP-Client verwenden, aber in FakeWeb, die nur Unterstützung für Net::HTTP bietet. VCR kann direkt in Typhoeus Haken (da es dafür so gute öffentliche APIs bereitstellt), wenn Sie es konfigurieren:

VCR.configure do |vcr| 
    vcr.hook_into :typhoeus 
end 

Die hook_into docs Liste alle Optionen und die Haken Arbeit, mit der HTTP-Clients. Wenn Sie Vorschläge zur Verbesserung der Dokumentation haben, um andere davon abzuhalten, diese Verwirrung zu haben, lassen Sie es mich bitte wissen.

+0

AH, das macht eine Menge Sinn. Aus irgendeinem Grund bedeutete "hook_into", dass VCR die Funktionen von: webmock (oder: fakeweb oder was auch immer) benötigt und verwendet, unabhängig davon, welcher HTTP-Client außerhalb der Spezifikationsgruppe verwendet wurde. Auf jeden Fall habe ich eine Pull-Anfrage unter https://github.com/vcr/vcr/pull/228 erstellt, um einen Vorschlag zu machen, wie es (zumindest für mich) klarer gemacht werden kann. Danke für die schnelle Antwort! – brycemcd