Sinon: stub readonly property throw "Tidak dapat mematikan properti yang tidak ada"

Dibuat pada 5 Jun 2020  ·  3Komentar  ·  Sumber: sinonjs/sinon

Jelaskan bugnya

  • Versi perpustakaan: 9.0.2

Untuk Mereproduksi

import * as sinon from "sinon";
class B {
    public readonly a: string;
    public get(): void {}
}

const bStub = sinon.createStubInstance(B);
sinon.stub(bStub , "a").value("test");

// let b = new B();
// sinon.stub(b, "a").value("test");

Perilaku yang diharapkan
rintisan dengan benar.

Ada masalah lama yang menyebutkan masalah yang sama tetapi ditutup dengan komentar yang tidak cukup membantu saya. https://github.com/sinonjs/sinon/issues/829

Semua 3 komentar

Namun, menetapkan nilai terlebih dahulu ke properti, maka rintisan akan berfungsi. Tapi saya benar-benar tidak ingin memanggil konstruktor karena cukup rumit.

import * as sinon from "sinon";

class B {
    public readonly a: string;
    public get(): void {}
    constructor(aa: string) {
        this.a = aa;
    }
}

// const bStub = sinon.createStubInstance(B);
let b = new B("t");
sinon.stub(b, "a").value("test");
console.log(b.a);

keluaran: tes

Saat ini bekerja dengan menugaskan langsung ke objek rintisan.

import * as sinon from "sinon";

class B {
    public readonly a: string;
    public get(): void {}
    constructor(aa: string) {
        this.a = aa;
    }
}

const bStub = sinon.createStubInstance(B);
(bStub as any).a = "test";
console.log(b.a);

keluaran: tes

Kami telah membuat keputusan sadar untuk tidak mengizinkan mematikan properti yang tidak ada, karena itu akan membuat beberapa skenario yang sangat membingungkan.

Kode yang dikirimkan tidak terlihat seperti JavaScript bagi saya, saya tidak tahu cara menjalankannya.

Harap buat masalah baru dan isi template untuk menghemat waktu semua orang.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat