Rails 2.1 e test con FlashHash

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!

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

http://github.com/rails/rails/commit/74eed6290e63111d1aad2b181692a84f4f040aea

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. <

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs