J'ai une suite de test structurée de cette façon:
it "will eat some pet fishes" do expect { meow }.to change(PetFish, :count).by(-1) end
3 Réponses :
Vous ne définissez pas les attentes sur avant code> bloc. Son but est de mettre en place l'environnement (et aussi il est exécuté avant em> la spécification, il est donc trop tard pour attendre quelque chose de celui-ci). Vous voulez régulièrement
laisser code>.
Donc, aucun moyen de les mettre à la fois dans le même contexte?
J'ai un contexte sous lequel je souhaite exécuter le nombre de spécifications, la plupart d'entre eux exigent MIOW CODE> à appeler avant de faire l'affirmation, mais il y en a peu de
attendre code> en eux, Je peux donc appeler
avant {miow} code> ou mettre
miceow code> invocation à chaque cas, ce dernier semble être une mauvaise idée.
Eh bien, dans tous les cas, comment pensez-vous qu'il est possible de vous attendre à quelque chose de code qui fonctionne avant B> la spécification? Il ne peut pas être fait, par définition. Alors, prenez le chemin laide.
Voulez-vous envisager de changer vos deux tests sur Attendez-vous à la syntaxe code> pour les obtenir sous le même contexte code>? Peut-être quelque chose comme:
Une idée intéressante, bien que la réécriture de tous les tests dans attendez-vous à code> semble être encombrant.
@Andrew Je prends un moment si vous avez beaucoup de tests, mais je pense que cela en vaut la peine à long terme, car il semble que attendre la syntaxe code> sera La syntaxe par défaut pour RSPEC se déplaçait et est Recommandé pour les nouveaux projets . Mais cela est principalement une question de votre goût et de vos préférences syntaxiques.
Cela ne devrait-il pas être attendre (MEOWING.CALL) CODE> VOIR AS QUE MEOIRE EST UN LAMBDA?
Je me rends compte que l'utilisation de variables d'instance est inférieure à l'idéal, mais si vos sensibilités le permettent, vous pouvez le faire:
def change_to(obj, method, &block) before = obj.send method yield (obj.send method) - before end