Sinon: Mock tidak bekerja dengan baik dengan onCall

Dibuat pada 12 Jun 2014  ·  4Komentar  ·  Sumber: sinonjs/sinon

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?

Komentar yang paling membantu

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 .

Semua 4 komentar

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

Apakah halaman ini membantu?
0 / 5 - 0 peringkat