我正在尝试使用attachment_fu编写一个可用的文件上传功能规范。然而,作者提供的用于测试的示例代码需要我去require action_controller/test_process
,以便我可以访问ActionController::UploadedStringIO
类。我之前在Rails 2.x中使用过它,但是在Rails 3中,它无法找到test_process
文件。
那么,在Rails 3中,我如何进行文件上传功能的测试呢?
我正在尝试使用attachment_fu编写一个可用的文件上传功能规范。然而,作者提供的用于测试的示例代码需要我去require action_controller/test_process
,以便我可以访问ActionController::UploadedStringIO
类。我之前在Rails 2.x中使用过它,但是在Rails 3中,它无法找到test_process
文件。
那么,在Rails 3中,我如何进行文件上传功能的测试呢?
我能够在Rails3和rspec中成功使用fixture_file_upload。
我只是在spec_helper.rb中添加了include ActionDispatch::TestProcess
,然后将以下内容作为filedata传递:
fixture_file_upload(Rails.root.join("spec/support/test.png"), 'image/png')
编辑:我升级了某些内容,导致它始终包含固定文件路径,所以我改用这个方法而不是fixture_file_upload:
Rack::Test::UploadedFile.new(Rails.root.join("spec/support/test.png"), 'image/png')
我现在正在测试Rails 3中的文件上传,虽然我不知道我的回答会不会有帮助。您是否可以更改测试呢?个人而言,我使用Cucumber/Capybara方法。 Capybara的DSL定义了
attach_file('Image', '/path/to/image.jpg')
个人认为这种测试方法比与StringIO对象进行交互更好...欢迎反驳。
对于Rails 3,这有些棘手。
您仍然可以使用fixture_file_upload
函数,但是您需要添加:
include ActionDispatch :: TestProcess
到您的测试用例中。
这在Rspec中根本不起作用。我只需获取文件本身并直接发布文件即可。
Rack::Test::UploadedFile.new
,并且包含ActionDispatch::TestProcess
,我非常赞同!在使用Factory Girl时,我曾经遇到过奇怪的行为。 - gingerlime