मैं एक बहुत ही कठिन समय कैसे एक वस्तु है कि मुझे मेरे jQuery कॉल का परीक्षण करके पता सेटअप करने के लिए समझने आ रही हैं परीक्षण करने के लिए। मुझे किसी भी Async कॉल या कुछ भी नकल करने की आवश्यकता नहीं है, केवल मूल उपयोग। तो मुझे मेरे समारोह मैं परीक्षण करना चाहते हैं निर्धारित करते हैं (सादगी के लिए छोटा कर दिया):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 नकली करने की जरूरत है, लेकिन मैं ऐसा करने के तरीके यह पता लगाने में असमर्थ हूँ जावास्क्रिप्ट में। 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
आपके द्वारा लिखे गए परीक्षण वास्तव में आपके कोड निष्पादन के अलावा कुछ भी साबित नहीं करते हैं। यह समस्याओं के साथ अन्य परीक्षणों को भी प्रदूषित कर सकता है यदि यह विफल रहता है क्योंकि यदि विफल हो जाता है तो आप $ को पुनर्स्थापित नहीं करेंगे। मुझे लगता है कि आप अभी भी इन परीक्षणों के बिंदु को खो रहे हैं: आपको ** व्यवहार ** के लिए एक परीक्षा लिखनी चाहिए ** आप अपने कोड से उम्मीद कर रहे हैं, न कि यह कैसे करता है इसका विवरण नहीं। आपको एक ऐसा परीक्षण लिखने की कोशिश करनी चाहिए जो सिर्फ यह सुनिश्चित करने पर केंद्रित हो कि उस गेमलिस्ट में एक्स विकल्प हैं जो आपके फ़ंक्शन चलाने के बाद उनमें से किसी भी मूल्य के साथ है। – alpian