1

我想在使用FactoryGirl 3.0的rails 3.2.6上創建回形針3.1.2的功能測試,當我傳遞文件附件時,我的控制器收到一個字符串,它是文件位置而不是Paperclip :: Attachment對象。Paperclip ::使用FactoryGirl作爲字符串傳遞的附件

我廠是:

include ActionDispatch::TestProcess 
FactoryGirl.define do 
    factory :artist do 
    id 1 
    name 'MyString' 
    photo {fixture_file_upload("#{Rails.root}/test/fixtures/files/rails.png",'image/png')} 
    end 
end 

而且我的測試是:

test "should create artist" do 
    assert_difference('Artist.count') do 
    post :create, :artist => { name: @artist.name, photo: @artist.photo }, :html => { :multipart => true } 
    end 

    assert_redirected_to artist_path(assigns(:artist)) 
end 

在我的控制器這樣的:

params[:artist][:photo].class.name 

等於 「字符串」,但這種通過當我添加它來測試

assert @artist.photo.class.name == "Paperclip::Attachment" 

我目前的解決辦法是建立在測試中fixture_file_upload:

test "should create artist" do 
    assert_difference('Artist.count') do 
    photo = fixture_file_upload("/files/rails.png",'image/png') 
    post :create, :artist => { name: @artist.name, photo: photo }, :html => { :multipart => true } 
    end 

    assert_redirected_to artist_path(assigns(:artist)) 
end 

其作品,但創建一個「機架::測試:: UploadedFile的」等我很困惑,爲什麼我的工廠返回「 Paperclip :: Attachment「,當調用同一個方法來創建它們時。

在此先感謝您可以擺脫的任何光線,因爲顯然我想使用工廠而不是在其外定義fixture_file_upload。

回答

1

你試過更換

photo {fixture_file_upload("#{Rails.root}/test/fixtures/files/rails.png",'image/png')} 

photo File.new("#{Rails.root}/test/fixtures/files/rails.png") 

您的工廠內。

+0

不幸的是,給出了相同的結果 –

相關問題