# Rails 2.1 e test con FlashHash

**URL:** <https://www.ruby-forum.com/t/rails-2-1-e-test-con-flashhash/137642>\
**Category:** IT\
**Created:** [May 14, 2008, 11:24pm UTC](https://www.ruby-forum.com/t/rails-2-1-e-test-con-flashhash/137642 "2008-05-14T23:24:09Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Gian\_marco\_G](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/f475e1/32.png) [@Gian\_marco\_G](https://www.ruby-forum.com/u/Gian_marco_G)\
**Post date:** [May 14, 2008, 11:24pm UTC](https://www.ruby-forum.com/t/rails-2-1-e-test-con-flashhash/137642/1 "2008-05-14T23:24:09Z")

</div>

Ciao a tutti,  
con Rails 2.0 ho fatto dei test che impostano il contenuto del Flash:

def test\_show\_should\_redirect\_to\_title\_and\_keep\_flash  
flash\_hash = ActionController::Flash::FlashHash.new  
flash\_hash.now[:par1] = ‘val1’  
flash\_hash.now[:par2] = ‘val2’

get :show, { :id =\> pages(:correct).id }, { :flash =\> flash\_hash }

assert\_redirected\_to :action =\> ‘title’, :id =\> ‘correct-page’  
assert\_not\_nil flash[:par1], ‘par1’  
assert\_not\_nil flash[:par2], ‘par2’  
end

Come si puo vedere creo un FlasHash (è l’oggetto che contiene i messaggi  
Flash), ci metto dentro 2 valori, passo questo oggetto nell’hash delle  
variabili di sessione e quindi controllo che, dopo la chiamata del  
metodo  
sooot test, il contenuto del Flash sia rimasto invariato.

Tutto questo funziona bene con Rails 2.0, ma da il seguente errore con  
Rails  
2.1

1. Failure:  
test\_show\_should\_redirect\_to\_title\_and\_keep\_flash(PagesControllerTest)

[/home/gimmi/workspace/webnotes/test/functional/pages\_controller\_test.rb:90:in  
`test\_show\_should\_redirect\_to\_title\_and\_keep\_flash’

/home/gimmi/workspace/webnotes/vendor/rails/activerecord/lib/…/…/activesupport/lib/active\_support/testing/setup\_and\_teardown.rb:59:in  
` **send** ’

/home/gimmi/workspace/webnotes/vendor/rails/activerecord/lib/…/…/activesupport/lib/active\_support/testing/setup\_and\_teardown.rb:59:in  
`run’]:  
par1.  
 expected to not be nil.

Sembra che l’oggetto FlashHash non arrivi piu al metodo sotto test…  
qualche  
idea??

Grazie!

---

<div class="post-metadata">

**Author:** ![Gian\_marco\_G](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/f475e1/32.png) [@Gian\_marco\_G](https://www.ruby-forum.com/u/Gian_marco_G)\
**Post date:** [May 18, 2008, 4:00pm UTC](https://www.ruby-forum.com/t/rails-2-1-e-test-con-flashhash/137642/2 "2008-05-18T16:00:08Z")

</div>

Ho fatto un po di indagini e ho scoperto che il test si rompe a casua  
del  
commit

> <https://github.com/rails/rails/commit/74eed6290e63111d1aad2b181692a84f4f040aea>
>
> Signed-off-by: Michael Koziarski \<michael@koziarski.com\>
> 
> \[#10 state:resolved\]

la modifica consiste nel cambio di ordine di esecuzione tra la action  
sotto  
test e il metodo flash.sweep (che svuota il falsh). Prima l’ordine era  
il  
seguente

execute action  
flash.sweep

adesso l’ordine è il seguente

flash.sweep  
execute action

Per esempio questa action

class SomeController \< ApplicationController

…

def trasparent\_redirect  
flash.keep  
redirect\_to :action =\> ‘useful\_action’  
end

def useful\_action  
end

…

end

Puo essere testata in questo modo

class SomeControllerTest \< ActionController::TestCase

…

def  
test\_trasparent\_redirect\_should\_redirect\_to\_useful\_action\_keeping\_flash\_content  
get :trasparent\_redirect, { }, { }, { :flash\_entry =\> ‘flash value’  
}

```
assert_redirected_to :action => 'useful_action'

flash.sweep # l'esecuzione di questo metodo imposta il flash così come

```

sarà nella action useful\_action  
assert\_equal ‘flash value’, flash[:flash\_entry]  
end

…  
end

–  
Gian Marco G.

On Wed, May 14, 2008 at 11:23 PM, Gian Marco G. \<
