unitarios test example javascript sinon

javascript - test - sinon stub example



Entendiendo el rendimiento de Sinon.js(), los rendimientos() y callsArg() (1)

Cuál es la diferencia entre

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

en la biblioteca de código auxiliar de Sinon.js ?

stub.yield() es el único que he podido captar:

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

Según lo probado con should.js, tendría todas las aserciones pasadas.

¿Existen patrones de prueba similares para stub.yields() y stub.callsArg(index) ?

La documentación no proporciona ningún ejemplo para aclarar estos otros dos métodos, pero tengo curiosidad por ellos.


Creo que los métodos, tal como se describen en la documentación, son los siguientes:

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

La principal diferencia entre los yields y callsArg se puede encontrar en la documentación de sinon para rendimientos:

Si un método acepta más de una devolución de llamada, debe usar callsArg para que el apéndice invoque otras devoluciones de llamada que la primera.

yields llamará al primer argumento de función que encuentre con cualquier argumento opcional que le proporcione. callsArg intentará invocar el argumento de función en el índice dado dentro del objeto de arguments esa llamada, y no le pasa ningún argumento (puede usar callArgWith para ese comportamiento).

spy.yield es muy similar a stub.yields excepto que es parte de la API espía y llama a todas las devoluciones de llamada que se le pasaron.

Aquí hay algunos ejemplos que demuestran las diferencias (perdóneme si los ejemplos son un poco artificiales):

Rendimientos:

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

LlamadasArg:

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();

Rendimiento:

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