2011-05-13 16 views
19

Hola necesito para construir la fábrica de mi modelo, por ejemplofábrica con el campo de subida carrierwave

Factory.define :farm do |f| 
    f.name { Factory.next :name } 
    f.harvest '3' 
    f.offers 'Random' 
    f.latitude '43' 
    f.longitude '-70' 
    f.about 'We rocks!' 
    f.logo { Factory.next :logo } # this doesn't work 
end 

Por ahora soy sólo pasan cadena "# {n} .jpg" en mi campo logotipo y este trabajo no haga , ¿cómo evaluar este campo? Estoy usando CarrierWave para cargar.

+1

https://github.com/jnicklas/carrierwave/wiki/How-to%3A-Use-test-fixtures –

+1

la página wiki anterior se trasladó a: https: // github .com/carrierwaveuploader/carrierwave/wi ki/How-to: -Utilizar-fábricas de prueba – agnessa

Respuesta

34

Es necesario incluir ActionDispatch::TestProcess en su fábrica (carriles 3), y utilizar el fixture_file_upload ayudante:

include ActionDispatch::TestProcess 

FactoryGirl.define do 
    factory :image do 
    title "Example image" 
    file { fixture_file_upload("files/example.jpg", "image/jpeg") } 
    end 
end 

También asegúrese de crear un archivo de ejemplo en test/fixtures/files/example.jpg, de lo contrario obtendrá un error que el archivo no existe.

+0

Parece algo terrible confiar en la existencia de un archivo externo durante una prueba unitaria. ¿Hay alguna forma de completar o encapsular el archivo? –

+1

No hay nada terrible en tener un archivo de dispositivo de prueba. Siempre que lo controle en el control de la fuente, siempre estará ahí para ejecutar sus pruebas. –

+0

Sí terrible es hiperbólico, lo siento. Solo quería saber si había una alternativa. –

25

Si no desea incluir ActionDispatch::TestProcess puede agregar archivos de este tipo,

Factory.define :brand do |f| 
    f.name "My Brand" 
    f.description "Foo" 
    f.logo { Rack::Test::UploadedFile.new(File.join(Rails.root, 'spec', 'support', 'brands', 'logos', 'logo_image.jpg')) } 
end 

A continuación, sólo incluyen el archivo en ese camino dado, en este caso, sería spec/support/brands/logos/logo_image.jpg

Esto es cómo sugieren hacerlo en su wiki https://github.com/jnicklas/carrierwave/wiki/How-to%3A-Use-test-fixtures

+2

Debe usar Rack :: Test :: UploadedFile porque los parámetros fuertes no pasarán el tipo de archivo. – sheerun

+0

Gracias sheerun, lo he cambiado de 'file.open' para usar' Rack :: Test :: UploadedFile.new' en su lugar. – Ryan

Cuestiones relacionadas