2016-10-04 8 views
0

私はnodeJSユニットテストのためにsinonJSフレームワークを使用しようとしています。問題は、サイロンスパイがまったく動かないということです。これは私のコードです:sinonスパイが関数呼び出しを検出しない

const callback = sinon.spy(someModule.callback) 

mainModule.doSomethingFunction() //someModule.callback function is called inside this function 

assert(callback.calledOnce, 'callback should be called once') 

それはちょうどで失敗します。

AssertionError: callback should be called once

しかし、私が呼ばれるべき関数の内部でログインしていて、それは明らかにだけ、それが呼び出されているsinonスパイを示しそれを検出しません。何が間違っているのだろうか?あなたはスパイのラップを解除するために行われているときにrestoreを呼び出す必要があり

const callback = sinon.spy(someModule, 'callback'); 
mainModule.doSomethingFunction(); 
assert(callback.calledOnce, 'callback should be called once'); 
callback.restore(); 

注:スパイでオブジェクトのメソッドをラップする

+1

質問に含まれているものがすべてテスト中のコードであれば、呼び出されません。あなたはスパイを作成し、それから何もしません。 – cartant

+0

私は質問を編集しました:私は間違っていると思われるコールバック内の関数を追加しました。スパイの目的はスパイすることではなく、それを使って何かをしないのか?私はスパイがスパイしていると思ったが、その後スパイされた機能が呼び出されたかどうかをテストできますか? –

+0

@ VilleMiekk-ojaはい、あなたのコードでは何も 'callback'を呼び出すことはありません。おそらく、それは 'doSomethingFunction'の引数として渡されるはずですか? – Bergi

答えて

2

、あなたはこのようにsinonを使用することができます。

+0

= /が動作しません。それはちょうどあなたがそれをしたように正確にそれを書いても、コールバックを検出しません。 –

+0

それは私がいくつかのノードのストリームのために持っているユニットテストで私のためにうまく動作します。ドキュメントは[こちら](http://sinonjs.org/docs/#sinonspy)です。あなたがそれを動作させることができない場合、あなたの質問にはほとんどコードが含まれていないので、あなたの質問に[mcve]を含める必要があります。 – cartant

+0

1つの違いは、ノードにASIを使用する点です。セミコロンの自動挿入。多分それはsinonに影響を与え、関数呼び出しを検出しないでしょうか? –

1

ステートメントconst callback = sinon.spy(someModule.callback)は、someModule.callbackが呼び出されたとき(BTWは定数ではない)、someModule.callbackの機能に代わるものではないが、それを呼び出すスパイを作成します。関数を置き換えるにはsomeModule.callback = sinon.spy(someModule.callback)

+0

件名に関連する新しい質問を参照してください:http://stackoverflow.com/questions/39868119/how-to-sinon-spy-module-export-utility-functions、あなたはそれを解決する –

関連する問題