【发布时间】:2011-10-17 12:08:40
【问题描述】:
我的控制器访问上传文件的tempfile 属性并将其传递给另一个模拟组件。我的测试代码有
@file = mock(Object)
@file.stub_chain(:tempfile, :path).and_return('thefile.zip')
# ...
post :create, :file => @file
控制器代码调用params[:file].tempfile.path。
从 Rails 3.0 升级到 3.1 后,上述行开始失败,并显示
undefined method `tempfile' for "#[RSpec::Mocks::Mock:0x2b0d9a0 @name=Object]":String
也就是说,Rails 3.1 自动将params[:file] 转换为字符串。
通过浏览器手动测试时,代码可以正常工作。我尝试使用fixture_file_upload,参数变成了File 对象,但它没有tempfile 方法。
那么如何将任意模拟对象作为参数传递给 Rails 3.1 中的操作?
【问题讨论】:
标签: file-upload mocking ruby-on-rails-3.1 rspec-rails