2016-11-25 137 views
7

我想測試在Rails Rspec請求測試中上傳文件的過程。我正在使用Paperclip進行資產存儲。如何在Rails Rspec請求測試中上傳文件規範

我已經試過:

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>」

而不是實際的文件。

相同的代碼在控制器測試

回答

0

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_pathparams: params之間,請添加並讓我知道。

希望有幫助!

+0

這兩個包括似乎沒有幫助(我曾嘗試過)。你能在Rails請求規範中獲得這個工作嗎? – hirowatari

1

在rails_helper.rb做

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 }

  • +0

    我不認爲這與RSB的答案有任何實際區別。 – hirowatari

    5

    試使用fixture_file_uploadfixture_file_upload

    或 如果你想使用這個在工廠

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

    'fixutre_file_upload'在引擎蓋下使用'Rack :: Test :: UploadedFile',所以這通常是相同的。 – hirowatari

    0

    可能會爲其他用戶是有用的:我得到了這個問題,因爲我錯誤地使用了get,而不是在我的規格一post請求。

    相關問題