لا يمكنني الحصول على mocks للعمل مع 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")
);
لسوء الحظ ، لا يوجد withExactArgs
على Stub
.
لكن...
يمكنك تحديد المكالمات الفردية إلى كعب، حتى عندما دعا عدة مرات مع نفس الحجج. على سبيل المثال
stub.withArgs("foo")
.onCall(0).returns("a")
.onCall(1).returns("b");
stub.withArgs("bar")
.onCall(0).returns("c")
.onCall(1).returns("d");
إذا كان هذا يساعد؟
@ مانتوني أعتقد أنه يمكن إغلاق هذه القضية
التعليق الأكثر فائدة
إنه ليس سلوكًا مقصودًا ولا خطأ. أنت تخلط الاستعارات.
onCall
وwithArgs
كلاهما طريقتان لتعريف استدعاء الطريقة.المثال الثاني الخاص بك معيب لنفس السبب وربما يجب إعادة كتابته باستخدام كعب.
لسوء الحظ ، لا يوجد
withExactArgs
علىStub
.