No puedo hacer que las simulaciones funcionen con onCall y los argumentos esperados.
El siguiente código da Object #<Object> has no method 'withExactArgs'
var mock = sinon.mock();
mock.exactly(2);
mock.onCall(0).withExactArgs("arg1", "arg2").returns("foo");
mock.verify();
El método withExactArgs
está disponible en la propiedad stub: mock.onCall(0).stub.withExactArguments
.
¿Es este comportamiento previsto o un error?
Parece que tampoco funciona con .stub. Recibo un error que dice que se llamó al método con los argumentos incorrectos. Mostrando los argumentos de la primera llamada pero los requisitos de la segunda. Como si descartara el onCall (0).
var mock = sinon.mock();
mock.exactly(2);
mock.onFirstCall().stub.withExactArgs("bar1", "bar2").returns("bar");
mock.onSecondCall().stub.withExactArgs("foo1", "foo2").returns("foo");
mock("bar1", "bar2");
mock("foo1", "foo2");
mock.verify();
Da ExpectationError: Anonymous mock received wrong arguments ["bar1", "bar2"], expected ["foo1", "foo2"]
No es un comportamiento intencionado ni un error. Estás mezclando metáforas. onCall
y withArgs
son ambas formas de identificar una invocación de método.
// So either,
mock.onCall(0).returns("foo")
// OR
mock.withArgs("arg1", "arg2").returns("foo")
// but not both
Su segundo ejemplo tiene fallas por la misma razón y probablemente debería reescribirse usando un código auxiliar.
var stub = sinon.stub();
stub.withArgs("bar1", "bar2").returns("bar");
stub.withArgs("foo1", "foo2").returns("foo");
stub("bar1", "bar2");
stub("foo1", "foo2");
sinon.assert.calledTwice(stub);
// verify the 2 calls
sinon.assert.calledWithExactly(stub, "bar1", "bar2");
sinon.assert.calledWithExactly(stub, "foo1", "foo2");
// verify the 2 calls in order
sinon.assert.callOrder(
stub.withArgs("bar1", "bar2"),
stub.withArgs("foo1", "foo2")
);
Desafortunadamente, no hay withExactArgs
en Stub
.
Sin embargo...
Puede identificar las llamadas individuales a un talón, incluso cuando se llama varias veces con los mismos argumentos. Por ejemplo
stub.withArgs("foo")
.onCall(0).returns("a")
.onCall(1).returns("b");
stub.withArgs("bar")
.onCall(0).returns("c")
.onCall(1).returns("d");
¿Si eso ayuda?
@mantoni creo que este problema se puede cerrar
Comentario más útil
No es un comportamiento intencionado ni un error. Estás mezclando metáforas.
onCall
ywithArgs
son ambas formas de identificar una invocación de método.Su segundo ejemplo tiene fallas por la misma razón y probablemente debería reescribirse usando un código auxiliar.
Desafortunadamente, no hay
withExactArgs
enStub
.