Quiero probar la carga de un archivo en rieles, pero no estoy seguro de cómo hacerlo.
Aquí está el código del controlador:
def uploadLicense
    #Create the license object
    @license = License.create(params[:license]) 
    #Get Session ID
    sessid = session[:session_id]
    puts "\n\nSession_id:\n#{sessid}\n"
    #Generate a random string
    chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a
    newpass = ""
    1.upto(5) { |i| newpass << chars[rand(chars.size-1)] }
    #Get the original file name
    upload=params[:upload]
    name =  upload['datafile'].original_filename 
    @license.format = File.extname(name)
    #calculate license ID and location
    @license.location = './public/licenses/' + sessid + newpass + name 
    #Save the license file
    #Fileupload.save(params[:upload], @license.location) 
    File.open(@license.location, "wb") { |f| f.write(upload['datafile'].read) }
     #Set license ID
    @license.license_id = sessid + newpass
    #Save the license
    @license.save
    redirect_to :action => 'show', :id => @license.id 
end
He intentado esta especificación, pero no funciona:
it "can upload a license and download a license" do
    file = File.new(Rails.root + 'app/controllers/lic.xml')
    license = HashWithIndifferentAccess.new
    license[:datafile] = file
    info = {:id => 4}
    post :uploadLicense, {:license => info, :upload => license}
end
¿Cómo puedo simular la carga del archivo usando rspec?
                    
                        ruby-on-rails
                                file-upload
                                tdd
                                rspec-rails
                                
                    
                    
                        usuario727403
fuente
                
                
            fuente

postfue un método de ayuda de ruta, cuyo único argumento intencionado no incluí entre paréntesis, por lo que los siguientes tokens se interpretaron como argumentos adicionales para el asistente, en lugar de argumentos para la publicación en sí. Por ejemplo, tuve enpost order_documents_path @order, document: filelugar depost order_documents_path(@order), document: file.No estoy seguro de si puede probar la carga de archivos utilizando solo RSpec. ¿Has probado Carpincho ?
Es fácil probar las cargas de archivos utilizando el
attach_filemétodo de capibara a partir de una especificación de solicitud.Por ejemplo (este código es solo una demostración):
fuente
si incluye Rack :: Test *, simplemente incluya los métodos de prueba
entonces puedes usar el método UploadedFile:
* NOTA: Mi ejemplo se basa en Sinatra, que extiende Rack, pero debería funcionar con Rails, que también usa Rack, TTBOMK
fuente
include Rack::Test::Methodsque usar Rack :: Test :: UploadedFile.require 'rack/testes suficiente.require 'rack/test'. si está usandoRack::Test::UploadedFileeso es lo suficientemente bueno como para usarlo. Siempre que la configuración de la aplicación rails esté bien. PD: Estoy encendidoRails 4yruby 2.1rack/testincluirá todo, desde la prueba, que incluyetest/methods, pero también incluye todo en la prueba, por lo que probablemente sea más de lo que necesita.No he hecho esto usando RSpec, pero tengo una prueba Test :: Unit que hace algo similar para cargar una foto. Configuré el archivo cargado como una instancia de ActionDispatch :: Http :: UploadedFile, de la siguiente manera:
Algo similar podría funcionar para usted también.
fuente
Así es como lo hice
Rails 6,RSpecyRack::Test::UploadedFileNO incluya
ActionDispatch::TestProcessni ningún otro código a menos que esté seguro de lo que está incluyendo.fuente
Tuve que agregar ambos de estos incluye para que funcione:
fuente