168 votes

Nettoyer facilement les autres talons

Existe-t-il un moyen de réinitialiser facilement tous les autres espions et maquettes qui fonctionneront correctement avec les blocs de moka avantChaque.

Je vois que le sandboxing 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

326voto

keithjgrant Points 4319

Sinon fournit cette fonctionnalité grâce à l'utilisation de Sandboxes, qui peut être utilisé de plusieurs façons :

// manually create and restore the sandbox
var sandbox;
beforeEach(function () {
    sandbox = sinon.sandbox.create();
});

afterEach(function () {
    sandbox.restore();
});

it('should restore all mocks stubs and spies between tests', function() {
    sandbox.stub(some, 'method'); // note the use of "sandbox"
}

ou

// wrap your test function in sinon.test()
it("should automatically restore all mocks stubs and spies", sinon.test(function() {
    this.stub(some, 'method'); // note the use of "this"
}));

119voto

Myk Willis Points 6209

Les réponses précédentes suggèrent d'utiliser sandboxes pour y parvenir, mais selon la documentation :

Depuis sinon@5.0.0, l'objet sinon est un bac à sable par défaut.

Cela signifie que le nettoyage de vos talons/maquettes/espions est maintenant aussi facile que :

var sinon = require('sinon');

it('should do my bidding', function() {
    sinon.stub(some, 'method');
}

afterEach(function () {
    sinon.restore();
});

9voto

Dimitris Zorbas Points 385

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'autre.collection api a changé et une façon de l'utiliser est la suivante :

beforeEach(function () {
  fakes = sinon.collection;
});

afterEach(function () {
  fakes.restore();
});

it('should restore all mocks stubs and spies between tests', function() {
  stub = fakes.stub(window, 'someFunction');
}

8voto

Sandeep Adi Points 71

restore() restaure simplement le comportement de la fonctionnalité tronquée mais ne réinitialise pas l'état des tronçons. Vous devrez soit emballer vos tests avec sinon.test et utiliser this.stub ou appeler individuellement reset() sur les talons

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X