Другой подход состоит в том, чтобы определить значение атрибута для yml и подготовить статический файл, чтобы мы могли использовать его, не загружая файлы на лету во время теста, используя метод fixture_file_upload (= сохраняет ресурс ЦП).
1) Предположим, что музыкальная модель имеет аудио скрепку следующим образом:
class Music < ActiveRecord::Base
has_attached_file :audio
...
end
2) определить каталог аудио хранилища для тестирования только в config / environment / test.rb как:
MyApp::Application.configure do
Paperclip::Attachment.default_options[:path] = ':rails_root/test/data/paperclip/:class/:attachment/:id_partition/:filename'
...
end
(Например, аудиофайл "sound_of_music.mp3" будет сохранен в папке test / data / paperclip / musics / audios / 111/222/333 / sound_of_music.mp3, где 111222333 - это идентификатор музыкальной записи, а 111/222/333 является частью id_partiion, определенной в 2) выше.)
(ПРИМЕЧАНИЕ: приведенное выше определение для теста влияет на путь разработки / хранения (не знаю почему?), Поэтому мне нужно было переопределить другие пути для dev & prod следующим образом в config / initializer / paperclip.rb:)
if Rails.env != 'test'
Paperclip::Attachment.default_options[:path] = 'mount_prefix_for_your_app/:rails_env/:class/:attachment/:id_partition/:filename'
end
3) написать test / fixtures / musics.yml как:
music01:
title: 'sound of music'
audio_file_name: sound_of_music.mp3
...
4) магазин актуальных mp3. Предположим, что вы загрузили из /tmp/sound_of_music.mp3 в хранилище скрепки, определенное в пункте 2 выше, через rails-console:
$ RAILS_ENV=test bundle exec rails console
> include ActionDispatch::TestProcess
> m = Music.find_by_title('sound of music')
> m.audio = fixture_file_upload("/tmp/sound_of_music.mp3", "audio/x-mpeg")
> m.save!
Выше шагов 1) .. 4) выполняются подготовительные задания перед запуском теста.
5) Теперь мы можем использовать его при юнит-тесте (или при тестировании модели на рельсах-4) как:
class MusicTest < ActiveSupport::TestCase
...
m = musics(:music01)
assert File.exist?(m.audio.path)
...