Quelle est la différence entre “include_examples” et “it_behaves_like”?
Dans RSpec, quelle est la différence entre it_behaves_like
et include_examples
?
La la documentation dit:
include_examples
— inclure(s) les exemples dans le contexte actuel
it_behaves_like "name"
— inclure(s) les exemples dans un contexte imbriqué
Mais qu'est que cela signifie réellement? Le remplacement de l'un à l'autre ne semble pas avoir un effet sur si mes tests de réussite ou d'échec. Est-il une raison de préférer l'une sur l'autre dans certaines situations?
Aussi, sont it_should_behave_like
et it_behaves_like
juste des synonymes?
Vous devez vous connecter pour publier un commentaire.
Vous le savez probablement comment utiliser
describe
,context
,it
etspecify
pour communiquer clairement l'un des aspects de votre code. Le imbriquée contexte fourni parit_behaves_like
peut être utilisé pour améliorer cette communication avec le lecteur.Je baserai mon exemple sur l'exemple donné dans la RSpec documentation pour partagé des exemples:
Si vous exécutez RSpec avec
--format documentation
vous obtenez le résultat suivant:De sorte que la différence est la façon dont la spécification est lire, par exemple en cas de panne.
Style que vous préférez est une question d'esthétique de la façon dont vous aimez votre specs à lire. En outre vous suggérons d'utiliser toujours le même style, si vous travaillez dans une équipe afin d'améliorer la cohérence.
Presque, le contexte est nommé différemment.
it should behave like ...
vsbehaves like ...
. Encore une fois une question d'esthétique.Il est une différence dans le cas où vous passer des paramètres à la shared_examples.
C'est très bien expliqué dans un avertissement dans leur doc:
include_examples
méthode : dansinclude_examples('My shared examples) { let(:variable_only_for_shared_example) { something }
lalet(:variable_only_for_shared_example)
sera écrasé si vous avez précédemment défini. Cela peut devenir un piège si votre rspec partagé des exemples sont destinés à la réutilisation laisser variables et vous "pensée" de les définir dans un bloc ferait.