2011-06-24 8 views
1

私は、同じファイル内のJavaScriptテストコードを入れずに、私が持っているいくつかの内部の機能をテストすることができるようにしたいです。私はこのように、内部の機能を持つクラスを継承しようとしているし、それらを公開するためにラッパー関数を追加してきました:それが継承したオブジェクトからオブジェクトA内のJavaScript関数を(それはプライベートです)を呼び出すことは可能ですか?

copyPrototype(TrafficChartCanvas_test, TrafficChartCanvas); 

function TrafficChartCanvas_test() { 

    TrafficChartCanvas_test.prototype.test_getYScale = function(reach) { 
     return getYScale(reach); 
    } 
} 

をcopyPrototypeが正常にTrafficChartCanvas_testのものにTrafficChartCanvasのプロトタイプを割り当てるとします。テストしようとしているファイルの一部です:

function TrafficChartCanvas(...) { 

    // some other stuff here... public functions, etc. 

    function getYScale(reach) { 
     ... 
    } 
} 

しかし、これは私のためには機能しません。私はこれを行うことができる他の方法はありますか?

答えて

3

getYScaleは、TrafficChartCanvasのプロトタイプの一部ではありません。クロージャです。彼らは2つの非常に異なるものです。あなたが好きなもの、あなたがTrafficChartCanvasを作成する方法を変更し、コードを再構築でき

TrafficChartCanvas.prototype = { 
    // (... Other functions ...) 
    getYScale: function() { 
     ... 
    } 
} 

をこれはプロトタイプで関数を置き、それは別のファイルに書かれており、付属のテストを使用してテストすることができます。あなたはは、外部のテストのためづけし作るクロージャ内のプライベートな機能を維持することはできません。プロトタイプのルートに行く必要があります。

+0

、私はTrafficChartCanvas_testにTrafficChartCanvasの閉鎖も利用できるようにすることができますどのように求めていたと思いますか? – therin

+0

正確には、クラスを別の方法で定義したいと思っています...可能な解決策で私の答えを更新します。 – searlea

+0

はい、それはうまくいくと思いますが、私はその機能を非公開にしたかったのです。私はちょうどこのソリューション – therin

1

「TrafficChartCanvas」機能は、明示的に関数をエクスポートする方法を手配することはできませんが、それの短い、全くそれを行うための方法はありません。私が見

+0

に対処する必要がありますねだから私はそれ試作品の一部にすることなくTrafficChartCanvasの範囲外この機能をテストすることができます方法はありませんか? – therin

+0

@ searleaの答えをチェックしてください。この関数は、プロトタイプに直接アタッチするか、またはそれを取得するための別の関数を提供することによって、明示的に「エクスポート」する必要があります。 – Pointy

関連する問題