J'ai un modèle utilisateurtest: reject_if dans ANAF
class User < ActiveRecord::Base
has_many :languages, :dependent => :destroy
accepts_nested_attributes_for :languages, :reject_if => lambda { |l| l[:name].blank? }
end
Je veux tester une partie reject_if avec RSpec 2.0.0. À l'heure actuelle, j'ai deux cas de tests simples pour que
it "should not save language without name by accepts_nested_attributes" do
lambda {
@user.update_attributes!("languages_attributes"=>{"0"=>{}})
}.should_not change(Language, :count)
end
it "should save language with name by accepts_nested_attributes" do
lambda {
@user.update_attributes!("languages_attributes"=>{"0"=>{"name"=>"lang_name"}})
}.should change(Language, :count).by(1)
end
Cependant, je suis tout à fait nouveau pour les tests et il semble IMHO vraiment bizarre. Je me demande si c'est une bonne façon de tester reject_if? Et est-ce qu'il y a une meilleure façon de le faire?
Votre approche est claire et je l'ai upvoted. Votre exemple ne dépend pas de la vue et de la forme et cela sonne bien => plus d'isolation. Cependant, je ne suis pas sûr si c'est une bonne façon de faire, puisque mon intention est de vérifier si l'enregistrement de langue n'est pas sauvegardé quand un utilisateur soumet un formulaire avec le champ de nom de langue vide. Peut-être que c'est une autre question, mais quelle est la bonne stratégie à suivre lors des tests unitaires - isoler de tout ce qui est possible ou essayer de simuler un vrai flux de travail d'application? Si la réponse est la dernière option, est-ce que mon exemple est valide et correct? –
@Tadas: Il n'y avait rien sur une vue ou un formulaire dans la question initiale, alors j'ai répondu au mieux de mes capacités à cet égard. Si vous cherchez à tester la vue/formulaire sur ce sujet, je vous recommande d'utiliser quelque chose comme le concombre ou le steak pour les tests d'intégration de la pile complète. –