Existe-t-il un moyen de réinitialiser facilement tous les mocks et stubs sinon spys qui fonctionneront proprement avec les blocs beforeEach de moka.
Je vois que le sandbox est une option mais je ne vois pas comment vous pouvez utiliser un sandbox pour cela
beforeEach ->
sinon.stub some, 'method'
sinon.stub some, 'mother'
afterEach ->
# I want to avoid these lines
some.method.restore()
some.other.restore()
it 'should call a some method and not other', ->
some.method()
assert.called some.method
Les réponses précédentes suggèrent d'utiliser
sandboxes
pour accomplir cela, mais selon la documentation :Cela signifie que nettoyer vos talons / mocks / espions est désormais aussi simple que:
la source
Une mise à jour de la réponse @keithjgrant.
Depuis la version v2.0.0 , la méthode sinon.test a été déplacée vers un
sinon-test
module séparé . Pour que les anciens tests réussissent, vous devez configurer cette dépendance supplémentaire dans chaque test:Vous pouvez également vous en passer
sinon-test
et utiliser des sandbox :la source
Vous pouvez utiliser sinon.collection comme illustré dans ce billet de blog (daté de mai 2010) par l'auteur de la bibliothèque sinon.
L'API sinon.collection a changé et une façon de l'utiliser est la suivante:
la source
restore()
restaure simplement le comportement de la fonctionnalité stubbed mais ne réinitialise pas l'état des stubs. Vous devrez soit encapsuler vos tests avecsinon.test
et utiliser,this.stub
soit appeler individuellementreset()
les stubsla source
Si vous voulez une configuration qui devra sinon toujours se réinitialiser pour tous les tests:
dans helper.js:
Ensuite, dans votre test:
la source
Notez que lorsque vous utilisez qunit au lieu de mocha, vous devez les envelopper dans un module, par exemple
la source
beforeEach
etafterEach
. Les méthodessetup
etteardown
seront obsolètes.Créez un bac à sable qui agira comme un conteneur de boîte noire pour tous vos espions, talons, moqueries et faux.
Tout ce que vous avez à faire est de créer un bac à sable dans le tout premier bloc de description afin qu'il soit accessible dans tous les cas de test. Et une fois que vous avez terminé avec tous les cas de test, vous devez publier les méthodes d'origine et nettoyer les stubs à l'aide de la méthode
sandbox.restore()
du hook afterEach afin qu'au moment de l'exécution, il libère leafterEach
cas de test des ressources bloquées soit réussi ou échoué.Voici un exemple:
la source