Rails integration test e file upload: come?

Salve gente,

finalmente pure io con una domanda su rails :slight_smile:
Qualcuno ha mai provato a usare fixture_file_upload()
con gli integration test?

Sto provando a testare un’applicazioncina che usa
attachment_fu (con rails 2.0.1) ma non ne vengo fuori,
per quel che ne capisco una cosa del genere:

data = fixture_file_upload(‘rails.png’, ‘image/png’)
post ‘action’, :data=>data

oppure, secondo me:

post ‘action’, {:data=>data}, {:multipart=>true}

dovrebbe andare, ma ottengo un simpatico errore

NoMethodError (undefined method `content_type’ for
“#ActionController::TestUploadedFile:0xb6f8f514”:String):

che è dovuto alla conversione che accade in
integration.rb:337, dove gli argomenti sono
trasformati in stringhe con to_s.

Gugolando un po’, sembra sia un bug che esiste da due
anni, mai fixato.

A voi è mai capitato? Come lo avete aggirato?

  __________________________________________________________

Sent from Yahoo! Mail - a smarter inbox http://uk.mail.yahoo.com

Non so aiutarti perché non ho mai scritto un integration test con
rails :-/

Il giorno 15/dic/07, alle ore 22:33, gabriele renzi ha scritto:

Sto provando a testare un’applicazioncina che usa
attachment_fu (con rails 2.0.1) ma non ne vengo fuori,
per quel che ne capisco una cosa del genere:

[…]

On Sat, 15 Dec 2007 21:33:04 +0000 (GMT), gabriele renzi wrote:

Salve gente,

finalmente pure io con una domanda su rails :slight_smile:
Qualcuno ha mai provato a usare fixture_file_upload()
con gli integration test?

Non puoi semplicemente mockare la chiamata a to_s?

tipo:
data.expects(:to_s).returns(‘pippo’)

?

Qualcuno ha mai provato a usare
fixture_file_upload()
con gli integration test?

Non puoi semplicemente mockare la chiamata a to_s?

tipo:
data.expects(:to_s).returns(‘pippo’)

il fatto è che non sto facendo un test unitario, ma di
integrazione.

L’intero test è in realtà una cosa tipo

  • vai home → redirect login
  • fai login ->redirect home
  • carica file
  • manipola file
  • ri-manipola file
  • etc…

io ho già veririfcato che l’upload funziona nel test
unitario del controller (che rails chiama funzionale,
ma vabè), ma qua ho bisogno del mio oggetto file-like
anche dopo.


Goto 10: http://www.goto10.it
blog it: http://riffraff.blogsome.com
blog en: http://www.riffraff.info

  ___________________________________________________________

Support the World Aids Awareness campaign this month with Yahoo! For
Good http://uk.promotions.yahoo.com/forgood/

On Dec 16, 2007 10:29 AM, gabriele renzi [email protected] wrote:

il fatto è che non sto facendo un test unitario, ma di
integrazione.

(forse… non ho provato) con:

def MyTestUploadedFile < ActionController::TestUploadedFile
def to_s
self
end
end

Shortcut for

ActionController::TestUploadedFile.new(Test::Unit::TestCase.fixture_path

  • path, type). Example:

post :change_avatar, :avatar =>

fixture_file_upload(‘/files/spongebob.png’, ‘image/png’)
def my_fixture_file_upload(path, mime_type = nil)
MyTestUploadedFile.new(
Test::Unit::TestCase.respond_to?(:fixture_path) ?
Test::Unit::TestCase.fixture_path + path : path,
mime_type
)
end

potresti poi fare:

data = my_fixture_file_upload(‘rails.png’, ‘image/png’)
post ‘action’, :data=>data

(magari hai gia provato e non funziona…)

ciao,
Luca

On Dec 15, 2007 10:33 PM, gabriele renzi [email protected] wrote:

Salve gente,

finalmente pure io con una domanda su rails :slight_smile:
Qualcuno ha mai provato a usare fixture_file_upload()
con gli integration test?

CIao Gabriele, ti scrivo di fretta quindi magari non ho capito bene il
problema…ma tempo fa avevo avuto un problema del genere, e avevo
sostituito
fixture_file_upload con un metodo del genere:

def uploaded_file(path, content_type=“application/octet-stream”,
filename=nil)
filename ||= File.basename(path)
t = Tempfile.new(filename)
FileUtils.copy_file(path, t.path)
(class << t; self; end;).class_eval do
alias local_path path
define_method(:original_filename) { filename }
define_method(:content_type) { content_type }
end
return t
end

…magari puo essere utile…fammi sapere…

-Andrea

— Luc

(forse… non ho provato) con:

def MyTestUploadedFile <
ActionController::TestUploadedFile
def to_s
self
end
end

eh si, ovviamente avevo provato :slight_smile:
Il problema è che tutto viene trasfrormatio in una
stringa http-style, quindi non posso infilarci i dati.
Dovrei scrivere un to_s che fa il form/mime encoding,
credo, o modificare la gestione dei parametri…
Insomma scrivere una patch, che sarebbe un’ammissione
che non funziona e non sto sbagliando io :slight_smile:


Goto 10: http://www.goto10.it
blog it: http://riffraff.blogsome.com
blog en: http://www.riffraff.info

  __________________________________________________________

Sent from Yahoo! Mail - a smarter inbox http://uk.mail.yahoo.com

— Andrea F. [email protected] wrote:

CIao Gabriele, ti scrivo di fretta quindi magari non
ho capito bene il
problema…ma tempo fa avevo avuto un problema del
genere, e avevo
sostituito
fixture_file_upload con un metodo del genere:

mh… mi pare abbastanza simile a quello che
TestFileUploaded in realtà, nel mio caso fallisce
comunque ma grazie per il tentativo :slight_smile:


Goto 10: http://www.goto10.it
blog it: http://riffraff.blogsome.com
blog en: http://www.riffraff.info

  __________________________________________________________

Sent from Yahoo! Mail - a smarter inbox http://uk.mail.yahoo.com