2017-02-03 2 views
0

私は本当にユニットテストを開始したいので、私はQUnitを使って書いたプラグインにテストを追加することを考えました。しかし、プラグイン内にカスタムのクラスやオブジェクトを作成してプロパティとメソッドをグループ化し、いくつかの分離をしたいのです。さらに、これらは独自のプライベートメソッドを持っています。ユニットテストjQueryプラグイン内のプライベート関数

私は単体テストを可能にするために私のコードをリファクタリングする最良の方法の周りに頭を上げようとしています。私はすべてを公開したり、カスタムオブジェクトの束でウィンドウオブジェクトを汚染したりするという考えが嫌いです。しかし、それはどうしたらいいのでしょうか?

多分私はワークフローに関してもっと良いアイディアが必要なのかもしれません。多分、開発のためのスクリプトはすべて公開されていますが、私がGruntを使ってそれを縮小すると、それを無名関数に戻します。

とにかく、私はこのことを、私がプラグインの構造まで話していることの原油の例として素早く書きました。 'getNewPosition'メソッドをテストするために単体テストを書くにはどうすればよいですか?

(function($) { 
"use strict"; 

// Custom Object 
var MyClass = function(element) { 
    var speed = 1; 
    // Private Function 
    var getNewPosition = function() { 
     var currentPosition = parseFloat(element.css("top")); 
     return currentPosition + speed; 
    } 

    return { 
     // Public Function 
     update: function() { 
      var newPosition = getNewPosition(); 
      element.css("top", newPosition.toString() + "px"); 
     } 
    } 
}; 


// jQuery Plugin 
$.fn.myPlugin = function() { 
    var aryElements = []; 
    this.each(function() { 
     var myObj = new MyClass($(this)); 
     aryElements.push (myObj); 

    }); 

    $(window).on("scroll", function(event) { 
     $.each(aryElements, function(i, element) { 
      element.update(); 
     }); 

    }); 
    return this; 
}; 
}(jQuery)); 

ご協力いただければ幸いです!ありがとう!

答えて

0

JSのプライベートメソッドをテストする簡単な方法はありません。私は何か公開するためのテストを書いて、すべてのコードブランチをテストしてプライベート関数が呼び出されることを確実にするようにすることをお勧めします。あなたのコード例では、MyClassコンストラクタはグローバルに利用可能であり、updateメソッドはgetNewPosition()を呼び出しますので、updateを確実にテストして、getNewPositionを確実に実行して(ある程度テストしてください)

私はQUnitでこのような何か書きたい:

QUnit.test("Test MyClass update", function(assert) { 

    var elem = $('<div />'); 
    elem.css('top', '10px'); 
    var c = new MyClass(elem); 
    c.update(); 

    assert.equal(elem.css('top'), '11px', 'top has been updated'); 
}); 
関連する問題