Comment écrire des tests rspec de façon défensive, de sorte que dans un scénario au moins une attente doit être satisfaite et que l'échec des autres est accepté? (sans changement d'entrée). AND
est assez facile par listing multiple expectations, mais comment est exprimé OR
?rspec attend condition ou condition
À titre d'exemple, un utilisateur a de nombreux messages, et l'utilisateur Bob hacks un formulaire afin que quand il soumet son formulaire de création poste, il envoie l'identifiant de l'utilisateur Dunc. Actuellement l'application ignore le passé id et utilise id de Bob comme Bob est la création de la publication. Nous pouvons donc tester que le poste nouvellement créé a Bob 's user_id. Toutefois, si à l'avenir le code est refactorisé pour qu'il renvoie un message d'erreur au lieu de supposer id de Bob, ce test échouerait à tort. Je veux tester l'intention, pas la mise en œuvre.
i besoin donc de tester que soit aucun poste est créé, ou que si l'on est créé, son pour Bob.
Cet exemple est si simple qu'il peut être résolu en testant
expect { run }.not_to change(Post.where(user_id: @other_user.id), :count)
Cependant, je suis à la recherche de la solution générale, dans les cas plus complexes, il peut y avoir beaucoup de conditions. Comment "OU" est-il réalisé dans Rspec? (ou n'est-ce pas possible?)