8
votes

Syntaxe simple pour tester les erreurs de validation

Je recherche un code propre et court pour tester des validations dans les rails.

Je fais actuellement quelque chose comme ça p> xxx pré>

Je suppose qu'il y a une meilleure façon qui montre également le message de validation? p>

Solution: strong> p>

Ma solution actuelle sans cadre supplémentaire est: P>

test "create thing without name" do
    thing = Thing.new :param1 => "Something", :param2 => 123
    assert thing.invalid?
    assert thing.errors.on(:name).any?
end


1 commentaires

Merci pour les réponses. Je vais essayer RSPEC et les autres un peu de temps. Pour le moment je m'aidons avec Assert (record.invalid?) Et Asser_equal ([], record.errors.full_messages)


6 Réponses :


5
votes

Vous ne mentionnez pas quel cadre de test que vous utilisez. Beaucoup ont des macros qui font des tests Activerecord un Snap.

Voici le "long chemin" pour le faire sans utiliser d'assistance de test: P>

thing = Thing.new :param1 => "Something", :param2 => 123
assert !thing.valid?
assert_match /blank/, thing.errors.on(:name)


3 commentaires

J'utilise seulement des rails simples pour le moment.


À partir de rails 3, il n'y a pas de méthode "sur" pour ActiveModel :: erreurs. Stackoverflow.com/questions/7526499/...


Cette réponse pourrait être datée, mais assert_match ne fonctionne pas sur un tableau.



0
votes

Vous pouvez donner le RSPEC-On-Rails-Matchers a essayé . Fournit une syntaxe comme: xxx


1 commentaires

La page dit: Ne m'utilisez pas. Je suis obsolète et je parsais de devoir. Devrait fonctionner avec RSPEC maintenant. Utiliser ça.



1
votes

Essayez aussi accepter_values_for GEM. Il permet de faire quelque chose comme ceci: xxx

de cette façon, vous pouvez tester des validations vraiment complexes facilement


0 commentaires

2
votes

J'utilise des rails 2.0.5, et quand je veux affirmer qu'un modèle échouera la validation, je vérifie le erreurs.full_messages code> méthode et comparez-le à un tableau de messages attendus.

assert_difference('MyModel.count') do
  post :create, :my_model => {
    :name => 'Some name'
  }
end

assert_equal([], assigns(:my_model).errors.full_messages)
assert_redirected_to my_model_path(assigns(:my_model))


0 commentaires

2
votes

Pour ceux qui utilisent des rails 3.2.1 et UP, je préfère utiliser le ajouté? Méthode: xxx

J'utilise une aide de test qui ressemble à ceci: xxx

qui me permet d'écrire des tests comme celui-ci: xxx


0 commentaires

1
votes

dans les versions plus récentes des rails (v5) avec minitest xxx

https://devdocs.io/Rails~5.2/activemodel/Errors


0 commentaires