2010-10-23 3 views
3

Je travaille sur les tests Rails 3. Tout en écrivant cas, je suis arrivé erreur Obsolescence commerails 3 test case error.on (: field) Vs. error [: field]

DEPRECATION WARNING: Errors#on have been deprecated, use Errors#[] instead. 
Also note that the behaviour of Errors#[] has changed. Errors#[] now always returns an Array. An empty Array is returned when there are no errors on the specified attribute. (called from on at /usr/local/lib/ruby/gems/1.9.1/gems/activemodel-3.0.0.rc/lib/active_model/deprecated_error_methods.rb:7) 

Pour que je l'ai utilisé des erreurs [:] champ au lieu de errors.on (champ) Maintenant erreur Obsolescence est parti, mais les cas ne fonctionnent pas comme auparavant il travaillait . Il ne teste aucune validation pour le modèle

Sol

+0

ce qui est vous question? – shingara

+0

la question est erreurs.on (: domaine) dans les rails unité de test en montrant l'erreur de dépréciation et les erreurs [: domaine] ne fonctionne pas correctement .. est-il un moyen de résoudre ce problème. –

Répondre

7

Après avoir recherché des exemples de la façon de le faire sans y trouver tout ce que je fini par faire:

errors[:field].present?/errors[:field].blank? 

Je ne sais pas si cela est manière préférée, mais il semble faire le travail.

+1

erreurs [: field] .blank? travaillé pour moi - merci – shedd

2

Je suis convertir mes vieux spécifications à quelque chose comme ça pour supprimer les avertissements relatifs à l'obsolescence:

model.should have(1).error_on(:field) 
    model.should have(:no).errors_on(:field) 
4

J'utilise quelque chose comme ça au moment:

@hamburger.errors[:ingredients].count.should == 1 
@hamburger.errors[:ingredients].should include "Tomatoes are missing dude!" 

espère que cela aide quelqu'un, En ce moment, c'est la solution la plus propre pour moi.

9

Remplacer:

errors.on(:field) 

avec:

errors.include?(:field)