javascript - node - Verificando la llamada a la función e inspeccionando los argumentos usando sinon spies
sinon stub example (3)
Me gustaría verificar que la bar()
se llama dentro de foo()
desde mi prueba de unidad.
Pensé que los espías de Sinon podrían ser adecuados, pero no sé cómo usarlos.
¿Hay alguna manera de comprobar que el método se llama? Tal vez incluso extraer los argumentos utilizados en la bar()
llamadas bar()
?
var spy = sinon.spy(foo);
function foo(){
bar(1,2,3);
}
function bar(){ }
foo();
// what to do with the spy?
¿No deberías estar espiando en la barra, en lugar de foo?
var spy = sinon.spy(bar)
Llama foo:
foo()
La barra de control se llamaba:
console.log(spy.calledOnce)
En su caso, usted está tratando de ver si se llamó la bar
, por lo que desea espiar la bar
lugar de foo
.
Como se describe en el doc :
function bar(x,y) {
console.debug(x, y);
}
function foo(z) {
bar(z, z+1);
}
// Spy on the function "bar" of the global object.
var spy = sinon.spy(window, "bar");
// Now, the "bar" function has been replaced by a "Spy" object
// (so this is not necessarily what you want to do)
foo(1);
bar.getCall(0).args => should be [1,2]
Ahora, espiar los aspectos internos de la función acopla fuertemente su prueba de "foo" a su implementación, por lo que caerá en el debate habitual "mockist vs clásico" .
Estoy de acuerdo con Adrian en decir que probablemente quisieras espiar un bar.
var barSpy = sinon.spy(bar);
Luego para comprobar que fue llamado una vez.
assert(barSpy.calledOnce);
Acabo de llamar a todos
assert(barSpy.called)
Llamado x cantidad de veces
assert.equal(barSpy.callCount, x);
Si desea extraer los argumentos de la primera llamada del espía:
var args = barSpy.getCalls()[0].args
Entonces puedes hacer lo que quieras con esos argumentos.