関数が定義されているのと同じモジュールから呼び出された関数をスタブする方法が見つかりません (スタブ化は機能しないようです)。以下に例を示します:
myModule.js:
リーリーmyModule.test.js:
リーリーこれは、(ほとんど) スタブ化できない Java 静的関数を思い出させます。
私がやろうとしていることを達成する方法はありますか?別のモジュールで foo
を抽出すれば機能することはわかっていますが、ここでやろうとしているのはそれではありません。また、bar
メソッドでキーワード this
を使用して foo
を呼び出すことも機能することはわかっていますが、この中で ̀this を使用するかどうかはわかりません。 case
混乱しています (OOP を使用していないため)。
私は
リーリーexports
の使用には少し警戒しています。なぜなら、それは少し魔法のようなものだからです (たとえば、Typescript でコーディングするときに直接使用することはありません)。そのため、残念ながら代替ソリューションを提案したかったのです。ソース コードを変更する必要はありますが、スタブ化する関数をオブジェクトにラップするだけです:および
sinon.stub(fooWrapper, 'foo')
。テストのためだけにこのようにラップしなければならないのは少し残念ですが、少なくとも Typescript では明示的でタイプセーフです (入力がany## である
exportsとは対照的に) #)。
これをテストしたところです。それはまるで魔法のように機能します。
リーリーsinon.stub(myModule, 'foo').returns('foo2')
を実行すると、sinon
はエクスポートされたオブジェクトの # # をスタブします。 #foo
は、myModule.js
の実際のfoo
関数ではありません...ご存知のとおり、foo
はモジュール アクセスの外部から使用できます。したがって、exports.foo
を設定すると、エクスポートされたオブジェクトexports.foo
にはfoo
の参照が格納されます。sinon.stub(myModule, 'foo').returns('foo2')
を呼び出すと、sinon
は実際のものではないexports.foo
をスタブします。foo