Comprendre Sinon.js du rendement(), les rendements(), et callsArg()

Quelle est la différence entre

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

dans le Sinon.js tampon de bibliothèque?

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

  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!" );

testé avec devrait.js, aurait toutes les affirmations passer.

y a-t-il des tests similaires pour stub.yields() et stub.callsArg(index)?

la documentation ne fournit aucune exemples pour clarifier ces deux autres méthodes, mais je suis curieux à leur sujet.

26
demandé sur TimeEmit 2013-04-14 23:14:21

1 réponses

je crois que les méthodes décrites dans la documentation, sont comme suit:

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

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

Si une méthode accepte plus d'un rappel, vous devez utiliser callsArg d'avoir le talon d'appeler d'autres rappels que le premier.

yields appelez le premier argument de fonction il rencontre avec tous les arguments optionnels que vous lui fournissez. callsArg va tenter d'invoquer l'argument de la fonction à l' Indice donné dans cet appel arguments de l'objet, et ne passe pas tous les arguments (vous pouvez utiliser callArgWith pour ce comportement).

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

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

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();
29
répondu Travis Kaufman 2018-06-01 03:13:05