我正在尝试使用attachment_fu为工作文件上传功能编写规范。但是,作者提供的用于测试的示例代码要求我action_controller/test_process
,以便我可以访问ActionController::UploadedStringIO
类。我之前在rails 2.x中使用过这个,但对于rails 3,它找不到test_process
文件。
如何继续测试rails 3中的文件上传功能?
答案 0 :(得分:23)
我能够在Rails3和rspec上使用fixture_file_upload。
我刚刚将include ActionDispatch::TestProcess
添加到了spec_helper.rb,然后传递了类似以下的内容作为filedata:
fixture_file_upload(Rails.root.join("spec/support/test.png"), 'image/png')
编辑:我升级的东西改变了它的行为,总是包括fixtures路径,所以我切换到这个而不是fixture_file_upload:
Rack::Test::UploadedFile.new(Rails.root.join("spec/support/test.png"), 'image/png')
答案 1 :(得分:4)
我现在正在测试rails 3中的文件上传,虽然我不知道我的回答会有多大帮助。你有可能改变测试吗?就个人而言,我正在使用Cucumber / Capybara方法。 Capybara的DSL定义
attach_file('Image', '/path/to/image.jpg')
就个人而言,这似乎是一种更好的测试方法,而不是与StringIO对象交互...随意反驳。
答案 2 :(得分:3)
找到Rails 3有点棘手
您仍然可以使用fixture_file_upload
功能,但必须添加:
include ActionDispatch::TestProcess
到您的测试用例。
这对Rspec来说根本不起作用。我只需要抓取文件本身并直接发布文件。