2016-11-25 12 views
7

Tôi muốn thử nghiệm tải lên tệp trong bài kiểm tra yêu cầu Rspec Rails. Tôi đang sử dụng Paperclip để lưu trữ nội dung.Cách tải lên tệp trong thông số yêu cầu Rails Rspec

Tôi đã thử:

path = 'path/to/fixture_file' 
params = { file: Rack::Test::UploadedFile.new(path, 'application/pdf', true) } 
post v1_product_documents_path, params: params 

Trong bộ điều khiển, tôi nhận được một chuỗi

"#Rack :: Test :: uploadedfile: 0x0055b544479128>"

thay vì tệp thực.

Cùng mã làm việc trong các thử nghiệm điều khiển

Trả lời

0

Dưới describe khối, bao gồm các phân hệ

include Rack::Test::Methods 
include ActionDispatch::TestProcess 

Bây giờ thử chạy các thông số kỹ thuật

path = 'path/to/fixture_file' 
params = { "file" => Rack::Test::UploadedFile.new(path, 'application/pdf', true) } 
post v1_product_documents_path, params: params 

Ngoài ra, tôi đoán bạn quên để thêm , giữa v1_product_documents_pathparams: params, vui lòng thêm điều đó và cho tôi biết.

Hy vọng điều đó sẽ hữu ích!

+0

Hai nội dung đó dường như không giúp ích gì (tôi đã thử điều đó trước đây). Bạn có thể làm việc này trong thông số yêu cầu Rails không? – hirowatari

1

Trong rails_helper.rb làm

include ActionDispatch::TestProcess 
include Rack::Test::Methods 

Sau đó, bạn có vài lựa chọn. 1. Bạn có thể sử dụng fixture_file_upload helper

let(:file) { fixture_file_upload('files/image.jpg') } 
    it 'it should work' do 
    post some_path, params: { uploads: { file: file } } 
    end 
  1. Bạn có thể sử dụng tập tin đã tải nhưng bạn phải từ bỏ đường dẫn đầy đủ

    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 }

+0

Tôi không nghĩ rằng điều này có bất kỳ sự khác biệt thực tế nào từ câu trả lời của RSB. – hirowatari

5

thử để sử dụng fixture_file_upload: fixture_file_upload

.210

hoặc nếu bạn muốn sử dụng này trong một nhà máy

Rack::Test::UploadedFile.new(File.open(File.join(Rails.root, '/spec/fixtures/images/bob-weir.jpg'))) 
+1

'fixutre_file_upload' sử dụng' Rack :: Test :: UploadedFile' dưới mui xe, vì vậy đây thường là giống hệt nhau. – hirowatari

0

Có thể hữu ích cho những người dùng khác: Tôi đã nhận vấn đề này bởi vì tôi sử dụng lẫn lộn một get thay vì yêu cầu post trong thông số kỹ thuật của tôi.

Các vấn đề liên quan