我正在尝试使用 FactoryGirl 3.0 在 rails 3.2.6 上为回形针 3.1.2 创建功能测试,当我传递文件附件时,我的控制器收到一个字符串,该字符串是文件位置,而不是 Paperclip::Attachment 对象。
我的工厂是:
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
它有效但创建了一个“Rack::Test::UploadedFile”,所以我很困惑为什么我的工厂在调用相同的方法来创建它们时返回一个“Paperclip::Attachment”。
提前感谢您对此有所了解,因为显然我想使用工厂而不是在它之外定义fixture_file_upload。