同じモジュール内でスタブ モジュール関数を呼び出す
P粉596161915
P粉596161915 2023-11-03 13:47:45
0
2
728

関数が定義されているのと同じモジュールから呼び出された関数をスタブする方法が見つかりません (スタブ化は機能しないようです)。以下に例を示します:

myModule.js:

リーリー

myModule.test.js:

リーリー

これは、(ほとんど) スタブ化できない Java 静的関数を思い出させます。

私がやろうとしていることを達成する方法はありますか?別のモジュールで foo を抽出すれば機能することはわかっていますが、ここでやろうとしているのはそれではありません。また、bar メソッドでキーワード this を使用して foo を呼び出すことも機能することはわかっていますが、この中で ̀this を使用するかどうかはわかりません。 case 混乱しています (OOP を使用していないため)。

P粉596161915
P粉596161915

全員に返信(2)
P粉099000044

私は exports の使用には少し警戒しています。なぜなら、それは少し魔法のようなものだからです (たとえば、Typescript でコーディングするときに直接使用することはありません)。そのため、残念ながら代替ソリューションを提案したかったのです。ソース コードを変更する必要はありますが、スタブ化する関数をオブジェクトにラップするだけです:

リーリー

および sinon.stub(fooWrapper, 'foo')。テストのためだけにこのようにラップしなければならないのは少し残念ですが、少なくとも Typescript では明示的でタイプセーフです (入力が any## である exports とは対照的に) #)。

いいねを押す +0
P粉797855790

これをテストしたところです。それはまるで魔法のように機能します。

リーリー

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 これが意味があるといいのですが!

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート