рдореБрдЭреЗ рдСрдирдХреЙрд▓ рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдХ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддреЗред
рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб 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 рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдХреЛ рдЧрд▓рдд рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкрд╣рд▓реА рдХреЙрд▓ рд╕реЗ рддрд░реНрдХ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ рд╕реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВред рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдСрдирдХреЙрд▓ (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")
);
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, 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
рджреЛрдиреЛрдВ рдПрдХ рд╡рд┐рдзрд┐ рдЖрдордВрддреНрд░рдг рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВредрдЖрдкрдХрд╛ рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдЙрд╕реА рдХрд╛рд░рдг рд╕реЗ рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд╣реИ рдФрд░ рд╕рдВрднрд╡рдд: рд╕реНрдЯрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ,
withExactArgs
рдкрд░ рдХреЛрдИStub
ред