2010-10-27 5 views
1

Je voulais tester une méthode dans ma classe d'aide, mais quand je fais quelque chose comme:Ne peut pas utiliser le flash dans ActionView :: TestCase quand je veux tester ma classe d'aide

require 'test_helper' 

class ApplicationHelperTest < ActionView::TestCase 
    def test_flash_messages 
    flash[:notice] = "Hello World" 
    assert_equal "<div class=\"message-notice\">Hello World<\/div>", flash_messages 
    end 
end 

que je reçois « NoMethodError : méthode non définie flash » pour nul: NilClass "

mais quand je fais quelque chose comme:

flash = {} 
flash[:notice] = "Hello World" 
assert_equal "<div class=\"message-notify\">Hello World<\/div>", flash_messages 

Je reçois le même message d'erreur, mais il est appelé dans" application_helper.rb: 6:` flash_messages '"

Par la façon dont mon application_helper ressemble:

module ApplicationHelper 

    def flash_messages 
    fl = '' 
    flash.each do |key,msg| 
     if flash[key] 
     fl = fl + "<div class=\"message-#{key}\">#{msg}</div>" 
     end 
     flash[key] = nil 
    end 
    return fl 
    end 

end 

Cela fonctionne sur le site, mais je veux être en mesure de tester ce genre de méthode avec test unitaire.

Répondre

0

Vous pouvez uniquement utiliser flash[:notice] dans vos contrôleurs pour les définir et dans vos vues pour les rendre. Le Flash est déclaré au ActionController::Flash. Lorsque vous créez votre propre Flash Hash (flash = {}), cela fonctionne, mais cette variable flash n'est pas mise à la disposition de votre assistant de quelque façon que ce soit, d'où l'erreur.

Si vous voulez tester vos messages flash correctement, je vous suggère d'écrire un test avec un outil comme le concombre: Effectuer une action, et s'attendre à voir du texte dans la réponse HTML. Fonctionne très bien.

+0

Thaks pour la réponse. Triste ... Si j'avais su que la plate-forme de test standard n'est pas capable de tester n'importe quel type de problèmes à venir, j'aurais choisi une autre plateforme ... – vurte

+0

Je crois qu'il y a des tests de vue avec une installation par défaut. Vous pouvez vous aussi tester le flash. – Ariejan

Questions connexes