web-dev-qa-db-fra.com

Comprendre le rendement (), le rendement () et les appels d'Arg () de Sinon.js

Quelle est la différence entre

  • stub.yield([arg1, arg2, ...])
  • spy.yields([arg1, arg2, ...])
  • stub.callsArg(index)

dans la bibliothèque de stub Sinon.js ?

stub.yield() est la seule que j'ai pu saisir:

  stub = sinon.stub(API, 'call_remote');
  callback = sinon.spy();
  API.call_remote('help', callback);
  @stub.yield( "solution!" );
  @stub.calledOnce.should.be.true;
  @callback.calledOnce.should.be.true;
  @callback.args[0][0].should.eql( "solution!" );

Comme testé avec should.js, toutes les assertions passeraient.

Existe-t-il des modèles de test similaires pour stub.yields() et stub.callsArg(index)?

La documentation ne fournit aucun exemple pour clarifier ces deux autres méthodes mais je suis curieux à leur sujet.

31
TimeEmit

Je pense que les méthodes décrites dans la documentation sont les suivantes:

  • spy.yield
  • stub.yields
  • stub.callsArg

La principale différence entre yields et callsArg peut être trouvée dans la documentation de Sinon pour les rendements:

Si une méthode accepte plusieurs rappels, vous devez utiliser callsArg pour que le stub invoque d'autres rappels que le premier.

yields appellera l'argument de fonction premier qu'il rencontre avec tous les arguments facultatifs que vous lui fournissez. callsArg tentera d'appeler l'argument de la fonction à index donné dans l'objet arguments de cet appel, et ne lui passera aucun argument (vous pouvez utiliser callArgWith pour ce comportement).

spy.yield est très similaire à stub.yields sauf qu'il fait partie de l'API espion et qu'il appelle tous les rappels qui lui sont passés.

Voici quelques exemples démontrant les différences (pardonnez-moi si les exemples sont un peu artificiels):

Rendements:

var fn = sinon.expectation.create().withArgs(1, 2);
var stub = sinon.stub().yields(1, 2);
stub(fn);
fn.verify();

CallsArg:

var f1 = sinon.expectation.create().never();
var f2 = sinon.expectation.create().once();
var stub = sinon.stub().callsArg(1);
stub(f1, f2);
f1.verify();
f2.verify();

Rendement:

var f1 = sinon.expectation.create().once();
var f2 = sinon.expectation.create().once();
var stub = sinon.stub().yield();
stub(f1, f2);
f1.verify();
f2.verify();
31
Travis Kaufman