AJAXRequest (1) (2) को लागू करने के निम्नलिखित दो तरीके बराबर होना चाहिए।
कहा करने के बाद कि:jQuery AJAX अनुरोध कैसे जासूसी करने के लिए?
- क्यों इकाई परीक्षण (3) कि कॉलबैक मार डाला गया था की पुष्टि करता है, (1) में सफल होता है और (2) में विफल रहता है?
- सफलता कॉलबैक पर जासूसी करने के लिए परीक्षण (3) को फिर से लिखना चाहिए (2)?
- यदि मैं साइनन और कोड (2) का उपयोग कर
stub jQuery.ajax
करने का प्रयास करता हूं तो मुझे एक त्रुटि मिलती है। मुझे इसे कैसे ठीक करना चाहिए?
कृपया, अधिक जानकारी के लिए कोड (3) में टिप्पणियां देखें।
(1)
ajaxRequest: function (message, callback) {
return $.ajax({
url: backendRouter.generate('feedback_send'),
type: 'POST',
dataType: 'json',
data: {
message: message
},
success: callback
});
}
(2)
ajaxRequest: function (message, callback) {
return $.ajax({
url: backendRouter.generate('feedback_send'),
type: 'POST',
dataType: 'json',
data: {
message: message
}
}).success(callback);
}
(3)
it("should execute the callback function on success", function() {
spyOn($, "ajax").andCallFake(function(options) {
options.success();
}); // If I use the code (2) I get the following error
// TypeError: Object #<Object> has no method 'success'
var callback = jasmine.createSpy();
ajaxRequest('some message', callback);
expect(callback).toHaveBeenCalled();
});
बाद
return $.ajax({
url: backendRouter.generate('feedback_send'),
type: 'POST',
dataType: 'json',
data: {
message: message
}
...
:
आप नंबर 2 में कोड का उपयोग करते हैं, तो आप jQuery पर ajax समारोह लागू कर रहे हैं:
(4)
it("makes a GET request for todo items", function() {
sinon.stub(jQuery, 'ajax');
backendController.ajaxRequest('some message', sinon.spy());
// Cannot call method 'success' of undefined
});
+1 धन्यवाद पर एक नजर डालें। असल में अब मैं कोड (2) पर चलाने के लिए एक परीक्षण (3) लिखना चाहता हूं। क्या आपको कुछ विचार है कि इसे कैसे बनाया जाए? मैंने अपना प्रश्न अपडेट किया। धन्यवाद। –
जाहिर है, .success() कॉल jQuery 1.8 में बहिष्कृत किया जाएगा। मेरा सुझाव है कि AJAX विधि को नकल करने के लिए जैस्मीन का उपयोग करने के बजाय आप sinon.js (http://sinonjs.org/) देखें जो वास्तव में आपके ब्राउज़र के मूल XHR का नकल करेगा। यह मेरे लिए बहुत अच्छा काम करता है। – badunk
मैंने jQuery.ajax 'stub करने की कोशिश की, मेरा प्रश्न, कोड (4) देखें। और मुझे मिलता है और त्रुटि, क्यों? मुझे 'sinonjs.org' का उदाहरण क्या मिलेगा? –