Опишите ошибку
Воспроизвести
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
Однако если заранее присвоить значение свойству, то заглушка будет работать. Но я действительно не хочу вызывать конструктор, так как это довольно сложно.
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, я не знаю, как его запустить.
Пожалуйста, создайте новую проблему и заполните шаблон, чтобы сэкономить всем время.