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