web-dev-qa-db-ja.com

シノンスタブコール

以前は次のスタブを完全に実行していました

_sinon.stub(console, 'log', () => {
    // Check what the arguments holds 
    // And either console.info it or do nothing
});
_

たとえば、そこにconsole.info(arguments)を追加すると、_console.log_が取得しているものがすべて表示されます。

バージョン_2xx_では、callsFakeに切り替えました:

_sinon.stub(console, 'log').callsFake(() => {
    // Check what the arguments holds
    // And either console.info it or do nothing
});
_

これは長く機能します。 console.info(arguments)にはBazaar値があり、_console.log_が渡すものとは関係ありません。

何が悪いのですか?

11
Kousha

callsFakeに渡す矢印関数は、通常の関数で通常期待するようなargumentsオブジェクトを受け取りません。

から [〜#〜] mdn [〜#〜]

矢印関数式の構文は関数式よりも短く、独自のthis、arguments、super、またはnew.target。

アロー関数を通常の無名関数(function() {...})に変更するか、spread演算子を使用して引数を明示的にアンパックします。

sinon.stub(console, 'log')
console.log.callsFake((...args) => {
  console.info(args)
});
5
philipisapain