Мой контроллер получает доступ к атрибуту 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?