Sinon: スタブ読み取り専用プロパティスロー「存在しないプロパティをスタブできません」

作成日 2020年06月05日  ·  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 評価