Тестирование attachment_fu в рельсах 3

Я пытаюсь написать спецификации для работы с возможностью загрузки файлов с помощью attachment_fu. Однако примерный код, предоставленный автором для тестирования, требует, чтобы я потребовал action_controller/test_process, чтобы у меня был доступ к классу ActionController::UploadedStringIO. Я использовал это раньше в rails 2.x, но для рельсов 3 он не может найти файл test_process.

Как я могу продолжить тестирование функции загрузки файлов в rails 3?

Ответ 1

Я смог использовать fixture_file_upload просто отлично с Rails3 и rspec.

Я просто добавил include ActionDispatch::TestProcess в spec_helper.rb, а затем передал что-то вроде следующего в качестве filedata:

fixture_file_upload(Rails.root.join("spec/support/test.png"), 'image/png')

EDIT: что-то, что я обновил, изменило поведение этого, чтобы всегда включать путь к приборам, поэтому я переключился на него вместо файла fixture_file_upload:

Rack::Test::UploadedFile.new(Rails.root.join("spec/support/test.png"), 'image/png')

Ответ 2

Я работаю над тестированием загрузки файлов в rails 3 прямо сейчас, хотя я не знаю, насколько полезным будет мой ответ. Можно ли изменить тест? Лично я использую подход Огурец/Капибара. Capybara DSL определяет

attach_file('Image', '/path/to/image.jpg')

Лично это кажется лучшим способом протестировать, чем взаимодействовать с объектом StringIO... не стесняйтесь отвечать.

Ответ 3

Это было несколько сложно найти для Rails 3

Вы все еще можете использовать функцию fixture_file_upload, но вы должны добавить:

include ActionDispatch::TestProcess

К вашему тестовому примеру.

Это не сработало с Rspec. Мне просто нужно было захватить файл и отправить файл напрямую.