Я использую Paperclip/RSpec и StackOverflow помог мне успешно окурок загрузку файлов на S3 с помощью этого кода:Stubbing Скрепка загружает из S3 в RSpec
SPEC/rails_helper.rb
config.before(:each) do
allow_any_instance_of(Paperclip::Attachment).to receive(:save).and_return(true)
end
Это отлично работает.
На моей модели у меня есть два PAPERCLIP поля:
class MyModel < ActiveRecord::Base
has_attached_file :pdf
has_attached_file :resource
end
Мой код использует #copy_to_local_file method
(Docs) для извлечения файла из S3.
#copy_to_local_file
принимает два параметра: стиль (:original
, :thumbnail
и т. Д.) И локальный путь к файлу для копирования.
Пример:
MyModel.resource.copy_to_local_file(:original, local_file.path)
Когда тестируемая система пытается получить доступ к MyModel#pdf#copy_to_local_file
или MyModel#resource#copy_to_local_file
, я первоначально получил ошибки вроде следующего:
No Such Key - cannot copy /email_receipts/pdfs/000/000/001/original/email_receipt.eml.pdf to local file /var/folders/4p/1mm86g0n58x7d9rvpy88_s9h0000gn/T/receipt20150917-4906-13evk95.pdf
No Such Key - cannot copy /email_receipts/resources/000/000/001/original/email_receipt.eml to local file /var/folders/4p/1mm86g0n58x7d9rvpy88_s9h0000gn/T/resource20150917-4906-1ysbwr3.eml
Я понимаю, что эти ошибки происходили из-за добавления в S3 , поэтому, когда он встречает MyModel#pdf#copy_to_local_file
или MyModel#resource#copy_to_local_file
, он пытается захватить файл в S3, которого там нет.
Текущее решение:
Я сумел подавить ошибки выше, но я чувствую, что это не полное решение и дает мои тесты ложное чувство безопасности. Мое половина решения незавершенного этого метод следующим образом:
спецификации/rails_helper.rb
before(:each) do
allow_any_instance_of(Paperclip::Storage::S3).to receive(:copy_to_local_file)
end
Хотя это гасит метод #copy_to_local_file
и удаляет ошибки, Безразлично» t фактически записывать любой контент в локальный файл, который предоставляется в качестве второго аргумента #copy_to_local_file
, поэтому он не совсем имитирует файл, загружаемый с S3.
Вопрос:
Есть ли способ незавершенной #copy_to_local_file
и иметь его записать содержимое консервов файла в моем spec/factories/files
каталога в локальный файл (его второй аргумент)?
Или я переусердствовал это? Это то, о чем я не должен беспокоиться?
Спасибо! Я выплюнул все и обязательно проведу интегральную проверку. Отличная идея. – madcow