2016-04-15 12 views
0

私はウィジェットを構築しようとしています。ジャスミンを使ってコードをテストしたいのですが、テストしたいことの1つはchangeHtmlが呼び出されたことです。ここでは、ウィジェットの構築をどのように計画していたかの大まかな例を示します。今ジャスミンを使用してこのコードをテストするにはどうすればよいですか?

var widget = function(userOptions){ 
    var options = userOptions 

    var init = function(){ 
    changeHtml(); 
    }; 

    var changeHtml = function(){ 
    document.getElementById(options.widgetId).innerHTML = 'New and exiting things!'; 
    }; 

    init(); 
}; 

var myWidget = new widget({widgetId: 'widget-div'}); 

changeHtml()widgetのプライベート(正しいフレーズ?)の関数であるので、私はそれが呼ばれるかされているかどうかを確認するために、それをスパイすることはできません。

私が今考えている唯一のことは、すべてを公開方法のwidgetにしていますが、ユーザーはchangeHtml()に電話したくないため、特に良いとは思われません。

これに対する解決策は何ですか?または、私は間違った方法でこれについて考えるのですが、divのinnerHTMLが呼び出される関数ではなく実際に変更されているかどうかを確認する方が良いでしょうか?

+1

あなたの最後を文はそれを合計します。メソッド呼び出しは実装の詳細です。結果をテストしたいのですが、それがどうやって得られるかは重要ではありません。 –

答えて

2

最終結果をテストするか、関数/オブジェクトで公開されている2)spyOn関数です。

があなたのシナリオでは、最終結果をテストするには、このように、それが変化した後、HTML値を確認するか、それが値を設定することができるように呼ばれていたことを確認するか必要があります:

describe("widget", function() { 
    it("Should change html", function() { 
     // Arrange 
     spyOn(document, "getElementById").and.callThrough(); 

     // Act 
     var myWidget = new widget({ widgetId: 'widget-div' }); 

     // Assert 
     expect(document.getElementById).toHaveBeenCalled(); 
    }); 
}); 
+0

ああ、私はこのアイデアが好き、感謝:) –

関連する問題