2011-01-05 10 views
0

プライベート関数が呼び出された場合はを表示しようとしています。最終的には、変数の中に変数が設定されているかどうかを調べるつもりです。Javascript Unittestingジャスミン/単体テスト - プライベート関数が呼び出されたかどうかをテストするにはどうすればよいですか?

私のjavascriptのは、私たちが、厳密のインスタンスを扱うアレントとして機能し、

mysamplefunction = function(item){ 

    /* figure out bla */  
    _myprivatefunction(item,bla) 

} 

_myprivatefunction = function(item, bla){ 


    /* do lots of exciting private things with item and bla */ 
} 
ジャスミンは、次の構文を期待しているようだ

..

spyOn(mysamplefunction ,'_myprivatefunction'); 

しかしプライベート関数で、次の次のようになります。 mysamplefunctionと_myprivatefunctionはメソッドではありません(その別のクラス)私はこれをどのように動作させるか分かりません。何か案は ??

+0

確かに、証明関数は、実装の詳細であり、テストする必要のあるものではありません。 – annakata

+0

@annakata現実世界では実際にはプライベートであるべきですが、実際に動作するようにテストする必要があります。私がJavaの場合は、メソッドのアクセシビリティを変更するためにリフレクションを使用していましたが、私はそれらをうまく実行できました。このタイプのアプローチはJavaScriptでは可能ではないようです。 – wmitchell

答えて

1

あなたはそれを説明するような機能が宣言されている場合は、私が期待する:仕事に

spyOn(window, '_myprivatefunction'); 

を。

関数はクロージャ内にある場合は、windowは唯一の要件は、例えば、それは_myprivatefunctionのプロパティを含むオブジェクトであるということである

TopLvlHeir.2ndlvel.samplefunctionpkg.publicTesting 

のようなものになることがありますfirstArg[secondArg]は関数です。

+0

私は、実際にそれを呼び出すのではなく、_myprivatefunctionが呼び出されたという事実をspyon/checkすることができるようにしたいと思います。 – wmitchell

+0

@wmitchell、私は知っています。私の答えはまだ立っている - それは全く関数を呼び出すのではない。しかし、あなたはグローバルスコープで '_myprivatefunction'を宣言しているので、それが属するオブジェクトは' window'です。したがって、私のコードは、 '' window''オブジェクトの '' _myprivatefunction''プロパティを監視しています。 –

+0

私はクロージャのトンを持っているので、_myprivatefunctionはウィンドウから隠されていますが、私はそれをパブリックインターフェイスに追加しました。 TopLvlHeir.2ndlvel.samplefunctionpkg.publicTesting_myprivate関数の行に沿って、あなたの例のウィンドウが何を意味するのかを調べようとしています。 – wmitchell

関連する問題