3

Sinon パッケージを使用して、モックする必要があるパラメーターの 1 つがアロー関数を使用して呼び出されるメソッド呼び出しをスタブ/モックするにはどうすればよいですか? 例えば

let objWithMethod = { method : function(x) {}; };
function SUT() {
    // use case
   let x = 'some value';
   let y = { anotherMethod : function(func) {}; };

   // I want to test that `y.anotherMethod()` is called with
   // `(x) => objWithMethod.method(x)` as the argument
   y.anotherMethod((x) => objWithMethod.method(x));
}

let mockObj = sinon.mock(objWithMethod);

// Both of these fail with a "never called" error
mockObj.expects('method').once().withArgs(objWithMethod.method.bind(this, x));
mockObj.expects('method').once().withArgs((x) => objWithMethod.method(x));

SUT();
mockObj.verify();

シノンのドキュメントにも、グーグル検索を数回試みた後も、何も見つかりませんでした。

4

1 に答える 1

0

あなたがやろうとしているルーズマッチは、matchersを使って行うことができます。

mockObj.expects('method').withArgs(sinon.match.func)

objWithMethod.methodはまったく呼び出されないため、失敗します。

これ

y.anotherMethod()//で呼び出されることをテストしたい

//(x) => objWithMethod.method(x)引数として

コードはテストを念頭に置いて書かれていないため、実行できません。JS はローカル変数を反映できず、SUT関数はブラックボックスです。

テストに到達可能で 100% のカバレッジを得るには、すべての変数とクロージャーを外部に公開する必要があります。

于 2016-07-15T04:26:33.890 に答える