10
votes

Comment "attendre" avant le blocage de changer quelque chose dans RSPEC?

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


0 commentaires

3 Réponses :


3
votes

Vous ne définissez pas les attentes sur avant bloc. Son but est de mettre en place l'environnement (et aussi il est exécuté avant la spécification, il est donc trop tard pour attendre quelque chose de celui-ci). Vous voulez régulièrement laisser . xxx


3 commentaires

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 à appeler avant de faire l'affirmation, mais il y en a peu de attendre en eux, Je peux donc appeler avant {miow} ou mettre miceow 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 la spécification? Il ne peut pas être fait, par définition. Alors, prenez le chemin laide.



4
votes

Voulez-vous envisager de changer vos deux tests sur Attendez-vous à la syntaxe pour les obtenir sous le même contexte ? Peut-être quelque chose comme: xxx


3 commentaires

Une idée intéressante, bien que la réécriture de tous les tests dans attendez-vous à 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 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) VOIR AS QUE MEOIRE EST UN LAMBDA?



0
votes

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


0 commentaires