Tak to działało. Najpierw musisz mieć klejnot fakeweb, albo się nie uda. Musisz również mieć pusty plik na ścieżce spec/support/paperclip/[model]/[attachment_name][ext]
.
To, co zrobiłem, to skopiować kod z Paperclip i wkleić go do mojej fabryki. Nie udało mi się uruchomić funkcji "paperclip_fixture".
factory :attachment do
file do |a|
# Stubbed Paperclip attachment from: https://github.com/thoughtbot/paperclip/blob/master/shoulda_macros/paperclip.rb#L68
# FIX: This was the only way I made this work. Calling the paperclip_fixture directly didn't work.
# See: http://stackoverflow.com/questions/4941586/stubbing-paperclip-s3-requests-in-specs
model, attachment, extension = "customer_attachment", "file", "doc"
definition = model.gsub(" ", "_").classify.constantize.
attachment_definitions[attachment.to_sym]
path = "http://s3.amazonaws.com/:id/#{definition[:path]}"
path.gsub!(/:([^\/\.]+)/) do |match|
"([^\/\.]+)"
end
begin
FakeWeb.register_uri(:put, Regexp.new(path), :body => "OK")
rescue NameError
raise NameError, "the stub_paperclip_s3 shoulda macro requires the fakeweb gem."
end
base_path = File.join(Rails.root, "spec", "support", "paperclip")
File.new(File.join(base_path, model, "#{attachment}.#{extension}"))
end
end
mógłbyś zamieścić więcej informacji o kodzie proszę? Na przykład czym jest a.cover? Zakładam, że to twój obiekt, a osłona to atrybut zawierający URI do obrazu? – hahuang65
Co dokładnie próbujesz przetestować? Pomoże to mieć większy kontekst tutaj. – hahuang65