在Rails 3中测试attachment_fu

11

我正在尝试使用attachment_fu编写一个可用的文件上传功能规范。然而,作者提供的用于测试的示例代码需要我去require action_controller/test_process,以便我可以访问ActionController::UploadedStringIO类。我之前在Rails 2.x中使用过它,但是在Rails 3中,它无法找到test_process文件。

那么,在Rails 3中,我如何进行文件上传功能的测试呢?

3个回答

23

我能够在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')

1
对于最后一条评论使用Rack::Test::UploadedFile.new,并且包含ActionDispatch::TestProcess,我非常赞同!在使用Factory Girl时,我曾经遇到过奇怪的行为。 - gingerlime

4

我现在正在测试Rails 3中的文件上传,虽然我不知道我的回答会不会有帮助。您是否可以更改测试呢?个人而言,我使用Cucumber/Capybara方法。 Capybara的DSL定义了

attach_file('Image', '/path/to/image.jpg')

个人认为这种测试方法比与StringIO对象进行交互更好...欢迎反驳。


3

对于Rails 3,这有些棘手。

您仍然可以使用fixture_file_upload函数,但是您需要添加:

include ActionDispatch :: TestProcess

到您的测试用例中。

这在Rspec中根本不起作用。我只需获取文件本身并直接发布文件即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接