Sinon: stub readonly property throw «Невозможно заглушить несуществующее свойство»

Созданный на 5 июн. 2020  ·  3Комментарии  ·  Источник: sinonjs/sinon

Опишите ошибку

  • Версия библиотеки: 9.0.2

Воспроизвести

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");

Ожидаемое поведение
заглушить правильно.

Существует старая проблема, в которой упоминается та же проблема, но она закрыта комментарием, который мне не очень полезен. https://github.com/sinonjs/sinon/issues/829

Все 3 Комментарий

Однако если заранее присвоить значение свойству, то заглушка будет работать. Но я действительно не хочу вызывать конструктор, так как это довольно сложно.

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);

вывод: тест

В настоящее время работает с прямым назначением объекту-заглушке.

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);

вывод: тест

Мы приняли сознательное решение не допускать заглушки несуществующих свойств, так как это может привести к очень запутанным сценариям.

Представленный код не похож на JavaScript, я не знаю, как его запустить.

Пожалуйста, создайте новую проблему и заполните шаблон, чтобы сэкономить всем время.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги