ruby-on-rails – Rails功能测试用例并将文件上传到ActionDispatch :: Http :: UploadFile

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Rails功能测试用例并将文件上传到ActionDispatch :: Http :: UploadFile前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在向远程存储文件的Rails应用程序添加测试.我正在使用默认的Rails功能测试.如何添加文件上传到他们?我有:
test "create valid person" do
  post(:create,:person => { :avatar => fixture_file_upload('avatar.jpeg') })
end

由于某种原因上传了Tempfile并导致AWS / S3 gem失败:

NoMethodError: undefined method `bytesize' for Tempfile

他们有什么办法可以让测试使用ActionDispatch :: Http :: UploadedFile,并在使用网络浏览器进行测试时执行更多的功能?是fixture_file_upload的方式来测试将文件上传到控制器?如果是这样,为什么它不像浏览器那样工作?

作为一个说明,我真的不想切换测试框架.谢谢!

解决方法

我使用 s3 gem而不是aws / s3宝石.其主要原因是不支持欧洲桶,而aws / s3的开发似乎已经停止.

如果要测试文件上传比使用fixtures_file_upload方法是正确的,它直接映射到Rack :: Test :: UploadedFile.new(如果测试文件不在fixtures文件夹中,可以使用它).

但是我也注意到,Rack :: Test :: uploaded文件对象的行为与ActionDispatch :: Http :: UploadedFile对象(这是上传文件类)不完全相同.基本方法(original_filename,read,size,…)都可以正常工作,但在使用文件方法时有一些差异.所以将控制器限制在这些方法上,一切都会很好.

另一个可能的解决方案是创建一个ActionDispatch :: Http :: uploaded文件对象,并使用它:

upload = ActionDispatch::Http::UploadedFile.new({
  :filename => 'avatar.jpeg',:content_type => 'image/jpeg',:tempfile => File.new("#{Rails.root}/test/fixtures/avatar.jpeg")
})

post :create,:person => { :avatar => upload }
原文链接:https://www.f2er.com/ruby/272164.html

猜你在找的Ruby相关文章