Искал этот вопрос и не смог найти его или ответа на него в Stack Overflow, но нашел его в другом месте, поэтому я прошу сделать его доступным на SO.
Фреймворк rails имеет функцию fixture_file_upload
( Rails 2 Rails 3 , Rails 5 ), которая будет искать в каталоге фикстур указанный файл и делать его доступным в качестве тестового файла для контроллера при функциональном тестировании. Чтобы использовать это:
1) Поместите файл, который будет загружен в тест, в подкаталог fixtures / files для тестирования.
2) В модульном тесте вы можете получить файл тестирования, вызвав fixture_file_upload ('path', 'mime-type').
например:
bulk_json = fixture_file_upload('files/bulk_bookmark.json','application/json')
3) вызовите метод post, чтобы выполнить нужное действие контроллера, передав объект, возвращаемый fixture_file_upload, в качестве параметра для загрузки.
например:
post :bookmark, :bulkfile => bulk_json
Или в Rails 5: post :bookmark, params: {bulkfile: bulk_json}
Это будет проходить через смоделированный пост-процесс с использованием копии файла Tempfile в вашем каталоге фикстур, а затем вернется к вашему модульному тесту, чтобы вы могли начать изучать результаты публикации.
Ответ Мори правильный, за исключением того, что в Rails 3 вместо ActionController :: TestUploadedFile.new нужно использовать Rack :: Test :: UploadedFile.new.
Созданный файловый объект затем можно использовать в качестве значения параметра в тестах Rspec или TestUnit.
источник
Я думаю, что лучше использовать новый ActionDispatch :: Http :: UploadedFile следующим образом:
Таким образом, вы можете использовать те же методы, что и при валидации (например, tempfile).
источник
Из книги Rspec, B13.0:
Rails 'предоставляет класс ActionController :: TestUploadedFile, который можно использовать для представления загруженного файла в хэше params спецификации контроллера, например:
Эта спецификация потребует, чтобы у вас был образ test_avatar.png в каталоге spec / fixtures. Он возьмет этот файл, загрузит его в контроллер, и контроллер создаст и сохранит реальную модель пользователя.
источник
Вы хотите использовать fixtures_file_upload . Вы поместите свой тестовый файл в подкаталог каталога fixtures, а затем передадите путь к fixtures_file_upload. Вот пример кода , использующего загрузку файла фикстуры
источник
Если вы используете тест рельсов по умолчанию с заводской девушкой. Штраф под кодом.
Примечание: вам нужно будет сохранить фиктивное изображение в
/test/images/100_100.jpg
.Работает отлично.
Ура!
источник
если вы получаете файл в свой контроллер со следующими
затем попробуйте следующее в своих спецификациях:
Это превратит поддельный метод в метод tempfile, который вернет путь к загруженному файлу.
источник