2013-07-18 6 views
5

Ich schreibe einige rspec specs, wo ein widgetpic Feld eines Objekts auf ein tatsächliches Bild zeigen muss, aber ohne mit dem Carrierwave Uploader.rspec und carrierwave - Wie setze ich eine Bild-URL direkt (BYPASS carrierwave uploader während des Tests)

Im Test möchte ich nur den Uploader umgehen und die URL eines Testbilds manuell setzen. Ich habe speziell ein paar Testbilder online und will einfach foo.widgetpic.url haben, um eine feste Position zurück: „http://mybucket.s3.amazonaws.com/test_pix/test1.png

Das Widget-Modell hat:

mount_uploader :widgetpic, WidgetPicUploader 

Also in meiner factory Fabrik Ich nehme ich tun muß so etwas wie dies

trait :test_pic do 
    SOMETHING "http://mybucket.s3.amazonaws.com/test_pix/test1.png" 
end 

versuchte ich widgetpic_url und remote_widgetpic_url Einstellung, aber das hat nicht funktioniert (widgetpic.url gibt immer noch meine default ‚kein Bild‘ Bild in meinem Uploader definiert).

Antwort

2

Es scheint, dass an Ihrem Uploader etwas anderes kaputt ist, nicht an der Fabrik. Können Sie Ihre Carrierwave-Konfiguration posten?

Davon abgesehen, die richtige Fabrik Syntax für Remote-Bilder ist REMOTE_ < Ressource> _url:

trait :test_pic do 
    remote_widgetpic_url "http://mybucket.s3.amazonaws.com/test_pix/test1.png" 
end 

jedoch darüber im Klaren sein, dass dadurch wird CarrierWave nicht umgangen werden. CarrierWave holt das Remote-Image für Sie und verwendet das heruntergeladene Image, um es erneut an den in Ihrem Uploader angegebenen Speicherort hochzuladen. Sie können diese Technik in Verbindung mit etwas wie WebMock oder VCR verwenden, um die HTTP-Anfrage zu emulieren und/oder aufzuzeichnen und sie wiederzugeben.

Ein einfacherer Ansatz könnte darin bestehen, die in Fog integrierten Mocking-Funktionen zu verwenden, um den Upload für den Test zu simulieren. Auf diese Weise können Sie nur ein Dummy-Bild in Ihrem Werk setzen:

factory :widget do 
    # ... 

    widgetpic Rack::Test::UploadedFile.new(File.open(
    File.join(
     File.dirname(__FILE__), '../fixtures/images/your_image_here.png'))) 
end 

Das Bild mit dem Hochladen zu simulieren verwendet wird, wird aber nicht an die Stelle auf S3 gebucht werden und Sie können die Upload-Test von Ende- beenden.

+0

ordentlicher Trick über den Nebel spöttisch, danke – jpwynn