私のコントローラーは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 で任意のモック オブジェクトをパラメーターとしてアクションに渡すにはどうすればよいでしょうか?