バグを説明する
再現するには
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のようには見えません。実行方法がわかりません。
新しい問題を作成し、テンプレートに記入して、時間を節約してください。