Mocking subidas de archivos en pruebas de controlador Rails 3.1
Mi controlador accede a latempfile
atributo de un archivo cargado y lo pasa a otro componente simulado. Mi código de prueba tiene
@file = mock(Object)
@file.stub_chain(:tempfile, :path).and_return('thefile.zip')
# ...
post :create, :file => @file
y el código del controlador llama aparams[:file].tempfile.path
.
Después de actualizar de Rails 3.0 a 3.1, la línea anterior comenzó a fallar con
undefined method `tempfile' for "#[RSpec::Mocks::Mock:0x2b0d9a0 @name=Object]":String
s decir, Rails 3.1 convirtióparams[:file]
a una cadena automáticamente.
El código funciona correctamente cuando se prueba manualmente a través de un navegador. Traté de usarfixture_file_upload
y el parámetro se convirtió enFile
objeto pero no teníatempfile
método.
ntonces, ¿cómo paso un objeto simulado arbitrario como parámetro a una acción en Rails 3.1?