Ответ 1
попробуйте использовать fixture_file_upload: fixture_file_upload
или если вы хотите использовать это в factory
Rack::Test::UploadedFile.new(File.open(File.join(Rails.root, '/spec/fixtures/images/bob-weir.jpg')))
Я хочу проверить загрузку файла в тесте Rails Rails. Я использую Paperclip для хранения активов.
Я пробовал:
path = 'path/to/fixture_file'
params = { file: Rack::Test::UploadedFile.new(path, 'application/pdf', true) }
post v1_product_documents_path, params: params
В контроллере я получаю строку
"# Rack:: Тест:: UploadedFile: 0x0055b544479128 > "
вместо фактического файла.
Тот же код работает в тестах контроллера
попробуйте использовать fixture_file_upload: fixture_file_upload
или если вы хотите использовать это в factory
Rack::Test::UploadedFile.new(File.open(File.join(Rails.root, '/spec/fixtures/images/bob-weir.jpg')))
В блоке describe
включить эти модули
include Rack::Test::Methods
include ActionDispatch::TestProcess
Теперь попробуйте запустить спецификации
path = 'path/to/fixture_file'
params = { "file" => Rack::Test::UploadedFile.new(path, 'application/pdf', true) }
post v1_product_documents_path, params: params
Кроме того, я думаю, вы забыли добавить ,
между v1_product_documents_path
и params: params
, добавьте это и дайте мне знать.
Надеюсь, что это поможет!
В rails_helper.rb do
include ActionDispatch::TestProcess
include Rack::Test::Methods
Тогда у вас есть несколько вариантов. 1. Вы можете использовать fixture_file_upload вспомогательный
let(:file) { fixture_file_upload('files/image.jpg') }
it 'it should work' do
post some_path, params: { uploads: { file: file } }
end
Вы можете использовать Загруженный файл, но вам нужно указать полный путь
let(:file) { Rack::Test::UploadedFile.new(Rails.root.join('spec',
'fixtures', 'blank.jpg'), 'image/jpg') }
let(:params) { { attachment: file, variant_ids: ['', product.master.id] } }
let(:action) { post :create, product_id: product.slug, image: params }
Для рельсов 6. Если вы используете папку spec/fixtures/files
для приборов, вы можете использовать помощник file_fixture
например
let(:csv_file) { fixture_file_upload(file_fixture('file_example.csv')) }
subject(:http_request) { post upload_file_path, params: { file: csv_file } }
Может быть полезно для других пользователей: у меня возникла эта проблема, потому что я ошибочно использовал get
вместо запроса post
в своих спецификациях.