1

我正在尝试使用 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。

4

1 回答 1

1

您是否尝试过更换

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

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

在你的工厂里面。

于 2012-07-01T17:02:43.047 回答