Lorsque j'ai appris l'existence de proxy_options, j'ai commencé à l'utiliser pour tester toutes mes portées nommées. Mais je me suis retrouvé copiant simplement les conditions de hachage directement à partir du modèle, donc il n'a pas été vraiment tester l'exactitude des résultats:Comment tester named_scopes et les méthodes de recherche?
po = {:conditions => "foo.created_at <= '#{Time.now.beginning_of_week}'"}
assert_equal po, Foo.created_this_week
Une autre approche est de trouver des exemples positifs et négatifs et voir si elles sont inclus dans les résultats ou non:
this_week = Foo.make(:created_at => Time.now)
last_week = Foo.make(:created_at => 1.week.ago)
assert Foo.created_this_week.include?(this_week)
assert !Foo.created_this_week.include?(last_week)
Mais cela ne fait pas un bon travail de vérifier les limites et quand les choses deviennent plus compliquées, vous aurez une longue liste de assert comprend ?. Il semble que ce serait plus agréable de trouver un jeu attendu de résultats, puis il suffit de cocher pour vous assurer qu'il correspond:
Foo.make(:created_at => 1.week.ago)
results = [Foo.make(:created_at => Time.now)]
assert_equal results, Foo.created_this_week
Mais le test pourrait échouer si les résultats sont retournés dans un ordre différent de celui que vous avez fourni . Je suppose que vous pourriez implémenter < => dans votre modèle afin que vous puissiez trier les deux tableaux. Mais il semble que cela ne soit pas vraiment nécessaire. Existe-t-il une meilleure façon de tester ce type de méthodes de recherche? Ou au moins une bonne façon généralement acceptée?
Je suggère de vérifier ce post thinkbot blog discutant juste ce sujet: http://robots.thoughtbot.com/post/200254501/testing-named-scopes – jonnii
Merci pour le lien. Il semble que sa réponse consiste à 1) rendre les étendues nommées privées de sorte que vous n'ayez pas à les tester et 2) utiliser la méthode d'égalité des tableaux pour tester les méthodes de recherche et ignorer la fragilité de l'ordre. – eremite
Voilà à peu près l'essentiel de celui-ci. Est-ce que cela vous aide? – jonnii