2014-09-19 6 views
7

हमारे आंतरिक कोणीय परियोजना में, सेवाओं में से एक में $http.head() कॉल है जिसे मैं परीक्षण करने का प्रयास कर रहा हूं।उम्मीद है कि एचईएडी दस्तावेज है लेकिन लागू नहीं किया गया है?

परीक्षण के लिए, मैं द्वारा प्रदत्त Fake HTTP backend का उपयोग कर रहा हूं।

it('handle status code 200', inject(function ($httpBackend, ConnectionService) { 
    spyOn(Math, 'random').andReturn(0.1234); 

    httpBackend = $httpBackend; 
    httpBackend.expectHEAD('ping?rand=1234').respond(200); 
    ConnectionService.sendRequest(); 
    httpBackend.flush(); 

    expect(ConnectionService.stats.packetsReceived).toEqual(5); 

    httpBackend.verifyNoOutstandingExpectation(); 
    httpBackend.verifyNoOutstandingRequest(); 
})); 

निम्न त्रुटि में परीक्षण के परिणाम चल रहा है:: यहाँ प्रासंगिक कोड है

  • :

    PhantomJS 1.9.7 (Mac OS X) connection service tests sendRequest function handle status code 200 
    FAILED TypeError: 'undefined' is not a function (evaluating 'httpBackend.expectHEAD('ping?rand=1234')') 
    at /path/to/app/app-connection-service_test.js:66 
    at d (/path/to/app/bower_components/angular/angular.min.js:35) 
    at workFn (/path/to/app/bower_components/angular-mocks/angular-mocks.js:2159) 
    

    एक छोटा सा खुदाई के बाद, मैं प्रासंगिक GitHub मुद्दा मिल गया है fix($httpBackend): Add missing expectHEAD() and expectOPTIONS() methods

जो, जहां तक ​​मैं समझता हूं, मतलब था था टी वास्तव में expectHEAD() कोणीय-मैक्स में विधि नहीं है - यह दस्तावेज है, लेकिन, वास्तव में, यह अभी तक एक स्थिर कोणीय रिलीज का हिस्सा नहीं है।

आगे बढ़ने का सबसे अच्छा तरीका क्या है?

ध्यान दें कि मुझे कोणीय < = 1.2 के साथ रहना है, क्योंकि इस ऐप को IE8 पर चलाने की आवश्यकता है (कोणीय 1.3 dropping support for IE8 है)।


समाधानों के बारे में मैं वर्तमान में सोच रहा हूँ में से एक get() साथ head() को बदलने के लिए है। इस मामले में, मैं इसे मौजूदा expectGET() विधि के साथ परीक्षण कर सकता हूं। लेकिन मुझे कमियों के बारे में निश्चित नहीं है।

उत्तर

2

लाइब्रेरी को फोर्क करने और संपादित करने के विरोध में, अंतर्निहित विधि का उपयोग करने के लिए यह बेहतर अभ्यास होगा।

$httpBackend.expect('HEAD', 'ping?rand=1234').respond(200); 

अन्य विधि जिसका आप उपयोग नहीं कर सकते हैं केवल शॉर्टकट विधि है। लाइब्रेरी को बदलने से इस विधि का उपयोग करना बहुत बेहतर और आसान है।

+0

धन्यवाद, मेरे लिए काम किया, यह निश्चित रूप से यहां एक आसान विकल्प है। हालांकि मैं इस बात से सहमत नहीं हूं कि @ डेव का जवाब एक डाउनवोट का हकदार है - उसने अभी भी मदद करने की कोशिश की और उसका दृष्टिकोण वैध बना हुआ है। – alecxe

+0

हाँ जो समझ में आता है, मैं अभी भी नया अपेक्षाकृत नया हूं; मैंने अपना डाउन वोट हटा दिया –

+0

डाउनवोट को हटाने के लिए धन्यवाद। मैंने आपका जवाब स्वीकार कर लिया है क्योंकि आप पहले आसान समाधान का प्रस्ताव देने वाले थे। अतिरिक्त प्रयासों के लिए डेव को बकाया पुरस्कार। उम्मीद है कि आप के लिए उचित लगता है। एक बार फिर धन्यवाद। – alecxe

5

तुम बस अपने आप को बदलने में जोड़ सकते हैं:

1523: - angular.forEach(['GET', 'DELETE', 'JSONP'], function(method) { 
1523: + angular.forEach(['GET', 'DELETE', 'JSONP', 'HEAD'], function(method) {  

आप एक गैर के साथ रहने के लिए है के रूप में देखकर: https://github.com/revolunet/angular.js/commit/b2955dd52725241dd9519baa12fe8ca74659004b

यह लाइन 1523 पर कोणीय mocks.js में एक एक पंक्ति परिवर्तन है वैसे भी कोणीय का वर्तमान संस्करण, इसे भविष्य में बहुत से मुद्दों का कारण नहीं बनना चाहिए।

संपादित करें: जोएलजेस्के के जवाब की समीक्षा करते हुए, वह एक अच्छा मुद्दा बनाता है - आप आसानी से इसे बिना फिसलने के कर सकते हैं। एक परिवर्तन मैं उसका समाधान करने के लिए होगा, बजाय विधि सीधे

$httpBackend.expect('HEAD', 'ping?rand=1234').respond(200); 

मैं बजाय सीधे शॉर्टकट विधि बनाना होगा बुलाने की है:

$httpBackend.expectHEAD = function(url, headers) { 
    return $httpBackend.expect('HEAD', url, undefined, headers); 
}; 

और फिर आप कर सकते हैं:

$httpBackend.expectHEAD('ping?rand=1234').respond(200); 
+0

अच्छी बात यह है कि यह एक आसान परिवर्तन है। लेकिन, आपको यह बदलने के लिए एक पसंदीदा तरीका क्या होगा: कांटा कोणीय-मोक्स और कांटा का उपयोग करें? धन्यवाद! – alecxe

+0

फोर्किंग शायद यह सबसे आसान तरीका है, हाँ। – dave

+0

जोएल के जवाब को स्वीकार करने का फैसला किया लेकिन आपको बक्षीस दिया। उम्मीद है कि आप के लिए उचित लगता है। मदद के लिए एक बार फिर से धन्यवाद! – alecxe

संबंधित मुद्दे