Je veux juste un talon de modèle spécifique , mais pas seulement un objet spécifique et ne tous les casRails Test & Mocha: Comment talonner un modèle spécifique - conditionnel any_instance?
Par ex Classe donnée 'Person' avec les attributs 'name' (chaîne) et 'cool' (booléen). Nous avons deux modèles:
person_bill:
name: bill
cool: false
person_steve:
name: steve
cool: false
Maintenant, je veux juste bouchonner steve, qui fonctionne bien:
p1 = people(:person_steve)
p1.stubs(:cool? => true)
assert p1.cool? #works
Mais si je charge à nouveau de modèle DB non:
p1 = people(:person_steve)
p1.stubs(:cool? => true)
p1 = Person.find_by_name p1.name
assert p1.cool? #fails!!
Cela fonctionne, mais affecte Bill ainsi, ce qui ne devrait pas:
Person.any_instance.stubs(:cool? => true)
assert people(:person_bill).cool? #doesn't fails although it should
Alors, comment puis-je juste Steve stub, mais dans tous les cas? Y a-t-il une conditionnel comme une instance comme
Person.any_instance { |p| p.name == 'Steve' }.stubs(:cool? => true)
Merci d'avance! Pourquoi ne pas simplement remplacer la méthode qui génère l'objet?
bien dans ce cas, mais mon problème actuel est un peu plus difficile. J'en ai besoin pour un test de contrôleur où la méthode de recherche est beaucoup plus «profonde» dans le code. Mais bon, une bonne partie de l'approche de test n'était pas acceptable, alors je l'ai changé pour que ça marche. Mais encore je suis curieux de savoir comment faire ce travail en tout cas .... – RngTng
Le remède pour le code profond le rend peu profond :-). En TDD ou de bons tests unitaires, vous voulez éviter le code complexe et l'imbrication profonde. Si c'est difficile à tester, la meilleure approche n'est pas un test complexe pour le code complexe. Mieux vaut simplifier/re-factoriser le code et écrire un test simple! – mixonic