Saya tidak bisa mendapatkan ejekan untuk bekerja dengan onCall dan argumen yang diharapkan.
Kode di bawah ini memberikan Object #<Object> has no method 'withExactArgs'
var mock = sinon.mock();
mock.exactly(2);
mock.onCall(0).withExactArgs("arg1", "arg2").returns("foo");
mock.verify();
Metode withExactArgs
tersedia di properti rintisan: mock.onCall(0).stub.withExactArguments
.
Apakah ini perilaku yang dimaksudkan atau bug?
Sepertinya itu tidak berfungsi dengan .stub juga. Saya mendapatkan kesalahan yang mengatakan bahwa metode ini dipanggil dengan argumen yang salah. Menampilkan argumen dari panggilan pertama tetapi persyaratan dari yang kedua. Seolah membuang 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();
Memberikan ExpectationError: Anonymous mock received wrong arguments ["bar1", "bar2"], expected ["foo1", "foo2"]
Ini bukan perilaku yang dimaksudkan atau bug. Anda mencampur metafora. onCall
dan withArgs
keduanya adalah cara untuk mengidentifikasi pemanggilan metode.
// So either,
mock.onCall(0).returns("foo")
// OR
mock.withArgs("arg1", "arg2").returns("foo")
// but not both
Contoh kedua Anda cacat karena alasan yang sama dan mungkin harus ditulis ulang menggunakan rintisan.
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")
);
Sayangnya, tidak ada withExactArgs
di Stub
.
Namun...
Anda dapat mengidentifikasi panggilan individual ke sebuah rintisan, bahkan saat dipanggil beberapa kali dengan argumen yang sama. Sebagai contoh
stub.withArgs("foo")
.onCall(0).returns("a")
.onCall(1).returns("b");
stub.withArgs("bar")
.onCall(0).returns("c")
.onCall(1).returns("d");
Jika itu membantu?
@mantoni Saya pikir masalah ini bisa ditutup
Komentar yang paling membantu
Ini bukan perilaku yang dimaksudkan atau bug. Anda mencampur metafora.
onCall
danwithArgs
keduanya adalah cara untuk mengidentifikasi pemanggilan metode.Contoh kedua Anda cacat karena alasan yang sama dan mungkin harus ditulis ulang menggunakan rintisan.
Sayangnya, tidak ada
withExactArgs
diStub
.