Π― Π½Π΅ ΠΌΠΎΠ³Ρ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΠΌΠ°ΠΊΠ΅ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ onCall ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ.
ΠΠΎΠ΄ Π½ΠΈΠΆΠ΅ Π΄Π°Π΅Ρ Object #<Object> has no method 'withExactArgs'
var mock = sinon.mock();
mock.exactly(2);
mock.onCall(0).withExactArgs("arg1", "arg2").returns("foo");
mock.verify();
ΠΠ΅ΡΠΎΠ΄ withExactArgs
Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Π·Π°Π³Π»ΡΡΠΊΠΈ: mock.onCall(0).stub.withExactArguments
.
ΠΡΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΠ°?
ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ Ρ .stub ΡΠΎΠΆΠ΅ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. Π― ΠΏΠΎΠ»ΡΡΠ°Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ Π±ΡΠ» Π²ΡΠ·Π²Π°Π½ Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ. ΠΠΎΠΊΠ°Π·Π°Π½Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΈΠ· ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°, Π½ΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ· Π²ΡΠΎΡΠΎΠ³ΠΎ. ΠΠ°ΠΊ Π±ΡΠ΄ΡΠΎ ΠΎΠ½ ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ 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();
ΠΠ°Π΅Ρ ExpectationError: Anonymous mock received wrong arguments ["bar1", "bar2"], expected ["foo1", "foo2"]
ΠΡΠΎ Π½Π΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ Π½Π΅ ΠΎΡΠΈΠ±ΠΊΠ°. ΠΡ ΡΠΌΠ΅ΡΠΈΠ²Π°Π΅ΡΠ΅ ΠΌΠ΅ΡΠ°ΡΠΎΡΡ. onCall
ΠΈ withArgs
- ΠΎΠ±Π° ΡΠΏΠΎΡΠΎΠ±Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π°.
// So either,
mock.onCall(0).returns("foo")
// OR
mock.withArgs("arg1", "arg2").returns("foo")
// but not both
ΠΠ°Ρ Π²ΡΠΎΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡΠΈΠ±ΠΎΡΠ΅Π½ ΠΏΠΎ ΡΠΎΠΉ ΠΆΠ΅ ΠΏΡΠΈΡΠΈΠ½Π΅ ΠΈ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°Π½ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π·Π°Π³Π»ΡΡΠΊΠΈ.
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")
);
Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π½Π° Stub
Π½Π΅Ρ withExactArgs
Stub
.
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½ΠΈΠ΅...
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ Π·Π°Π³Π»ΡΡΠΊΠΈ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Ρ ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈ ΡΠ΅ΠΌΠΈ ΠΆΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ
stub.withArgs("foo")
.onCall(0).returns("a")
.onCall(1).returns("b");
stub.withArgs("bar")
.onCall(0).returns("c")
.onCall(1).returns("d");
ΠΡΠ»ΠΈ ΡΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ?
@mantoni ΠΡΠΌΠ°Ρ, ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΡΡΡΡ
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΡΠΎ Π½Π΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ Π½Π΅ ΠΎΡΠΈΠ±ΠΊΠ°. ΠΡ ΡΠΌΠ΅ΡΠΈΠ²Π°Π΅ΡΠ΅ ΠΌΠ΅ΡΠ°ΡΠΎΡΡ.
onCall
ΠΈwithArgs
- ΠΎΠ±Π° ΡΠΏΠΎΡΠΎΠ±Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π°.ΠΠ°Ρ Π²ΡΠΎΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡΠΈΠ±ΠΎΡΠ΅Π½ ΠΏΠΎ ΡΠΎΠΉ ΠΆΠ΅ ΠΏΡΠΈΡΠΈΠ½Π΅ ΠΈ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°Π½ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π·Π°Π³Π»ΡΡΠΊΠΈ.
Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π½Π°
Stub
Π½Π΅ΡwithExactArgs
Stub
.