# Rails integration test e file upload: come?

**URL:** <https://www.ruby-forum.com/t/rails-integration-test-e-file-upload-come/123285>\
**Category:** IT\
**Created:** [December 15, 2007, 10:33pm UTC](https://www.ruby-forum.com/t/rails-integration-test-e-file-upload-come/123285 "2007-12-15T22:33:55Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![gabriele\_renzi](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/e19b73/32.png) [@gabriele\_renzi](https://www.ruby-forum.com/u/gabriele_renzi)\
**Post date:** [December 15, 2007, 10:33pm UTC](https://www.ruby-forum.com/t/rails-integration-test-e-file-upload-come/123285/1 "2007-12-15T22:33:55Z")

</div>

Salve gente,

finalmente pure io con una domanda su rails 🙂  
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](http://uk.mail.yahoo.com)

---

<div class="post-metadata">

**Author:** ![gabriele\_renzi](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/e19b73/32.png) [@gabriele\_renzi](https://www.ruby-forum.com/u/gabriele_renzi)\
**Post date:** [December 16, 2007, 12:49am UTC](https://www.ruby-forum.com/t/rails-integration-test-e-file-upload-come/123285/2 "2007-12-16T00:49:08Z")

</div>

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:

[…]

---

<div class="post-metadata">

**Author:** ![gabriele\_renzi](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/e19b73/32.png) [@gabriele\_renzi](https://www.ruby-forum.com/u/gabriele_renzi)\
**Post date:** [December 16, 2007, 3:56am UTC](https://www.ruby-forum.com/t/rails-integration-test-e-file-upload-come/123285/3 "2007-12-16T03:56:49Z")

</div>

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

> Salve gente,
> 
> finalmente pure io con una domanda su rails 🙂  
> 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’)

?

---

<div class="post-metadata">

**Author:** ![gabriele\_renzi](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/e19b73/32.png) [@gabriele\_renzi](https://www.ruby-forum.com/u/gabriele_renzi)\
**Post date:** [December 16, 2007, 10:30am UTC](https://www.ruby-forum.com/t/rails-integration-test-e-file-upload-come/123285/4 "2007-12-16T10:30:45Z")

</div>

> > 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](http://www.goto10.it)  
blog it: [http://riffraff.blogsome.com](http://riffraff.blogsome.com)  
blog en: [http://www.riffraff.info](http://www.riffraff.info)

```
  ___________________________________________________________

```

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

---

<div class="post-metadata">

**Author:** ![gabriele\_renzi](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/e19b73/32.png) [@gabriele\_renzi](https://www.ruby-forum.com/u/gabriele_renzi)\
**Post date:** [December 16, 2007, 5:50pm UTC](https://www.ruby-forum.com/t/rails-integration-test-e-file-upload-come/123285/5 "2007-12-16T17:50:17Z")

</div>

On Dec 16, 2007 10:29 AM, gabriele renzi [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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

---

<div class="post-metadata">

**Author:** ![gabriele\_renzi](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/e19b73/32.png) [@gabriele\_renzi](https://www.ruby-forum.com/u/gabriele_renzi)\
**Post date:** [December 16, 2007, 6:18pm UTC](https://www.ruby-forum.com/t/rails-integration-test-e-file-upload-come/123285/6 "2007-12-16T18:18:58Z")

</div>

On Dec 15, 2007 10:33 PM, gabriele renzi [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Salve gente,
> 
> finalmente pure io con una domanda su rails 🙂  
> 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

---

<div class="post-metadata">

**Author:** ![gabriele\_renzi](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/e19b73/32.png) [@gabriele\_renzi](https://www.ruby-forum.com/u/gabriele_renzi)\
**Post date:** [December 16, 2007, 6:16pm UTC](https://www.ruby-forum.com/t/rails-integration-test-e-file-upload-come/123285/7 "2007-12-16T18:16:38Z")

</div>

— Luc

> (forse… non ho provato) con:
> 
> def MyTestUploadedFile \<  
> ActionController::TestUploadedFile  
> def to\_s  
> self  
> end  
> end

eh si, ovviamente avevo provato 🙂  
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 🙂

–  
Goto 10: [http://www.goto10.it](http://www.goto10.it)  
blog it: [http://riffraff.blogsome.com](http://riffraff.blogsome.com)  
blog en: [http://www.riffraff.info](http://www.riffraff.info)

```
  __________________________________________________________

```

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

---

<div class="post-metadata">

**Author:** ![gabriele\_renzi](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/e19b73/32.png) [@gabriele\_renzi](https://www.ruby-forum.com/u/gabriele_renzi)\
**Post date:** [December 16, 2007, 7:00pm UTC](https://www.ruby-forum.com/t/rails-integration-test-e-file-upload-come/123285/8 "2007-12-16T19:00:40Z")

</div>

— Andrea F. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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 🙂

–  
Goto 10: [http://www.goto10.it](http://www.goto10.it)  
blog it: [http://riffraff.blogsome.com](http://riffraff.blogsome.com)  
blog en: [http://www.riffraff.info](http://www.riffraff.info)

```
  __________________________________________________________

```

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