使用FactoryGirl当作为字符串回形针::附件传递(Paperclip::Attachment

2019-10-16 22:42发布

我试图创建使用FactoryGirl 3.0导轨3.2.6回形针3.1.2功能测试,当我通过文件附件我控制器接收一个字符串,它是文件位置,而不是回形针::附件对象。

我厂是:

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的”等我很困惑,为什么我的工厂返回一个“回形针::附件”时同样的方法被调用来创建他们。

预先感谢您能在此有何启示因为很明显,我想用工厂,而不是定义它外面的fixture_file_upload。

Answer 1:

你有没有试过,以取代

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

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

你的工厂内。



文章来源: Paperclip::Attachment passed as string when using FactoryGirl