検索

ホームページ  >  に質問  >  本文

同じモジュール内でスタブ モジュール関数を呼び出す

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

myModule.js:

リーリー

myModule.test.js:

リーリー

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

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

P粉596161915P粉596161915470日前798

全員に返信(2)返信します

  • P粉099000044

    P粉0990000442023-11-04 11:50:52

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

    リーリー

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

    返事
    0
  • P粉797855790

    P粉7978557902023-11-04 00:12:56

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

    リーリー

    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
  • キャンセル返事