Kev*_*tre 16 ruby gem ruby-on-rails functional-testing
我正在为远程存储文件的Rails应用程序添加测试.我正在使用默认的Rails功能测试.如何向他们添加文件上传?我有:
test "create valid person" do
post(:create, :person => { :avatar => fixture_file_upload('avatar.jpeg') })
end
Run Code Online (Sandbox Code Playgroud)
这由于某种原因上传a Tempfile并导致AWS/S3gem失败:
NoMethodError: undefined method `bytesize' for Tempfile
Run Code Online (Sandbox Code Playgroud)
他们是否可以ActionDispatch::Http::UploadedFile通过网络浏览器进行测试,以获得测试使用和执行更多的测试?是fixture_file_upload测试上传文件到控制器的方式吗?如果是这样,为什么它不像浏览器一样工作?
作为一个说明,我真的不想切换测试框架.谢谢!
Ste*_*man 56
我使用s3 gem而不是aws/s3 gem.主要原因是不支持欧洲桶,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 }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7845 次 |
| 最近记录: |