ruby-on-rails – Rails功能测试用例并将文件上传到ActionDispat
我正在向远程存储文件的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 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |