私はjQuery呼び出しをテストするためのオブジェクトの設定方法を理解するのに非常に苦労しています。私は非同期の呼び出しや何かを模倣する必要はありません、ちょうど基本的な使用。jQueryを使って基本的な使い方をテストする
listGamesCallback : function(data) {
var gameList = $("#gameList select");
gameList.empty();
$.each(data, function() {
var newOption = $('<option>', {value : this.gameId });
newOption.text(string);
newOption.data("isJoinable", isJoinable);
// Add it to the list
gameList.append(newOption);
});
}
は、私はユニットテスト、この方法には、ここでのjQueryを模擬する必要があるが、私はこれを行う方法を見つけ出すことができないよ:だから私は、私がテストしたい私の機能を設定してみましょう(簡単にするために切り捨て) JavaScriptで。 jsMockitoがなくても、jQueryがこのような状況にあるプロパティを持つオブジェクトを作成する方法はわかりません。これについての助けに感謝します。
私はjsTestDriver、jsHamcrest、jsMockito、jQueryを使用しています。しかし、これらのプロパティを持つ$オブジェクトを作成する一般的なアプローチも素晴らしいでしょう。ありがとうございました!
尋ねられた人のために、私はそれがちょっとした仕事のように思えたのですが、理由は分かりません。
var saved$ = $;
var mockContruct = mockFunction();
var mockedGamelist = mock(jQuery);
var mockedOption = mock(jQuery);
mocked$ = (function() {
var test = function(name) {
var args = jQuery.makeArray(arguments);
return mockContruct.call(test, args);
};
$.extend(test, $);
// This is what confuses me. This worked, but it's wierd
// It allows me to use the regular jQuery functions like
// $.each, while returning mocked objects when selectors are used.
test.prototype.constructor = test;
return test;
})();
$ = mocked$;
when(mockContruct).call(anything(), hasItem(containsString("#gameList")))
.thenReturn(mockedGamelist);
when(mockContruct).call(anything(), hasItems(containsString("<option>"), both(object()).and(hasMember("value"))))
.thenReturn(mockedOption);
headerFunctions.listGamesCallback([ {
gameId : 1,
isWhitesTurn : false,
isGameOver : false,
whiteUserName : "foobar",
blackUserName : "barfoo"
} ]);
JsMockito.verify(mockedGamelist).empty();
JsMockito.verify(mockedGamelist).append(mockedOption);
$ = saved$;
テストコードも入力しておけば便利です。 :) – alpian
申し訳ありませんが、遅れて返信しましたが、私はこれが優先順位が低くなるように再割り当てされました。私は質問に編集したテストを実行する複雑な方法を持っています。 jQueryがどういう仕組みをしているのかよくわからないので、あまりよく書かれていません。 – CrazyBS
あなたが書いたテストでは、あなたのコード以外のものは実際には実行されません。失敗した場合に$を復元しないため、失敗した場合には、問題のある他のテストも汚染される可能性があります。私はあなたがまだこれらのテストのポイントを見逃していると思います:**あなたはあなたのコードから期待している**動作**のためのテストを書かなければなりません。関数が実行されたら、Xのオプションを持つgameListの値が何であっても、それを証明することに焦点を当てたテストを書くべきです。 – alpian