rails rack_test feature example ruby-on-rails unit-testing rspec paperclip

ruby-on-rails - rack_test - ruby capybara github



Pruebas unitarias de clips de clip de papel con Rspec(Rails) (4)

En caso de que alguien más encuentre esto a través de Google, RAILS_ROOT ya no es válido en Rails 3.0. Esa línea debe leer:

Image.new :photo => File.new(Rails.root + ''spec/fixtures/images/rails.png'')

(Tenga en cuenta la falta de barra diagonal!)

Total Rspec noob aquí. Escribiendo mis primeras pruebas esta noche.

Tengo un modelo llamado Image. Usando un clip de papel adjunto un archivo llamado foto. Cosas estándar He ejecutado el generador de clip y todo funciona bien en los modos de producción y prueba.

Ahora tengo un archivo de especificaciones llamado image.rb y se parece a esto (fue creado por el generador nifty_scaffold de ryanb):

require File.dirname(__FILE__) + ''/../spec_helper'' describe Image do it "should be valid" do Image.new.should be_valid end end

Esta prueba falla y me doy cuenta de que se debe a las validaciones de mi modelo (es decir, validates_attachment_presence)

El error que me sale es:

Errors: Photo file name must be set., Photo file size file size must be between 0 and 1048576 bytes., Photo content type is not included in the list

Entonces, ¿cómo le digo a rspec que cargue una foto cuando se ejecuta mi prueba?

Supongo que tiene algo que ver con los accesorios ... tal vez no. He intentado jugar con ellos pero no he tenido suerte. Para el registro, he creado una carpeta llamada imágenes dentro de mi carpeta de accesorios y los dos archivos que quiero usar en mis pruebas se llaman rails.png y grid.png)

He intentado hacer lo siguiente:

it "should be valid" do image = Image.new :photo => fixture_file_upload(''images/rails.png'', ''image/png'').should be_valid # I''ve also tried adding stuff like this #image.stub!(:has_attached_file).with(:photo).and_return( true ) #image.stub!(:save_attached_files).and_return true #image.save.should be_true end

Pero rspec se queja de que "fixture_file_upload" no haya sido reconocido ... Estoy planeando obtener ese libro de Rspec. Y he rastreado la red buscando una respuesta, pero parece que no puedo encontrar nada. Mi base de datos de prueba SÍ se llena con algunos datos cuando elimino las validaciones de mi modelo, así que sé que parte funciona bien.

Gracias por adelantado,

EDITAR:

images.yml se ve así:

one: name: MyString description: MyString two: name: MyString description: MyString


Esto debería funcionar con Rails 2.X:

Image.new :photo => File.new(RAILS_ROOT + ''/spec/fixtures/images/rails.png'')

A partir de Rails 3, RAILS_ROOT ya no se usa, en su lugar, debe usar Rails.root .

Esto debería funcionar con Rails 3:

Image.new :photo => File.new(Rails.root + ''spec/fixtures/images/rails.png'')

Definitivamente obtener el libro RSpec, es fantástico.


Rails.root es un objeto de ruta de acceso, así que puedes usarlo así:

Image.new :photo => Rails.root.join("spec/fixtures/images/rails.png").open

Editar - probablemente no funciona en Rails 3 ...

  • Ver respuesta por @Paul Rosania.

Utilizo la gema multipart_body en mis pruebas de integración. Es un poco más cierto para BDD que las pruebas.

http://steve.dynedge.co.uk/2010/09/19/multipart-body-a-gem-for-working-with-multipart-data/

Con respecto a rspec y paperclip, la directiva has_attached_file: photo crea un atributo virtual de clases, es decir, foto ... cuando asigna un archivo o una ruta a la foto, el paperclip se hace cargo, almacena el archivo, opcionalmente lo procesa, por ejemplo, auto -crear miniaturas, importar una hoja de cálculo, etc. No le está diciendo a rspec que pruebe el clip. Está invocando el código y diciéndole a rspec cuáles son los resultados de ese código, debe ser.

En $ GEM_HOME / gems / paperclip-2.3.8 / README.rdoc, aproximadamente el 76% del archivo a través del archivo bajo == Post Processing (específicamente las líneas 147 y 148):

--- [COMIENCE LA CITA] --- NOTA: Debido a que los procesadores funcionan al convertir el adjunto original en los estilos, no se ejecutarán procesadores si no hay estilos definidos. --- [CITA FINAL] ---

Al leer el código, verás el soporte: original ... ¿tu has_attached_file define un estilo?

Utilizo un genérico ": styles => {: original => {: this_key_and =>: this_value_do_not_do_anything_unless_a_ lib _paperclip_processors__foo_dot_rb__does_something_with_them}}" ... solo para obtener el paperclip en el que nos encontramos.

Uno podría pensar que sería por defecto o más obvio en los documentos.