2013-04-29 14 views
6

मैं फ़ीड (आरएसएस) अनुप्रयोग विकसित करते समय AngularJS इकाई परीक्षण के साथ खेल रहा हूं। फीड रिमोट आरएसएस डेटा पार्स ला सकता है और पार्स किए गए आइटम को सहेज सकता है। प्राप्त करते समय आरएसएस के परीक्षण के लिए मैं उपयोग $ httpBackend नकली:

beforeEach(inject(function (_$httpBackend_, _feedMock_, _mockConfig_) { 
    _$httpBackend_.when('GET', _mockConfig_.FEED_URL).respond(_feedMock_); 
})); 

और फिर

नीचे
$httpBackend.expectGET(mockConfig.FEED_URL); 
feed.fetch(); 
$httpBackend.flush(); 

यह ठीक काम करता है।

लेकिन मुझे अद्यतन आरएसएस डेटा लाने और नई वस्तुओं को जोड़कर फ़ीड को अपने राज्य को वास्तविकता देने की आवश्यकता है। तो, फ़ीड एक ही अनुरोध करता है, लेकिन नया अद्यतन डेटा मिला। मैं कुछ इस तरह से सर्वर परिभाषा को पुन: कोशिश कर रहा हूँ:

$httpBackend.when('GET', _mockConfig_.FEED_URL).respond(feedMockUpdated); 

और साथ उम्मीद और फ्लश तो एक ही आपरेशन करते हैं, लेकिन $ httpBackend पुराने डेटा (feedMock), नहीं नई (feedMockUpdated) के साथ प्रतिक्रिया। उसी अनुरोध पर विभिन्न डेटा के साथ प्रतिक्रिया देने के लिए मैं $ httpBackend कैसे बना सकता हूं?

उत्तर

17

आप एक फ़ंक्शन के साथ respond सेट अप कर सकते हैं, न कि केवल एक स्थिर डेटा सेट।

डॉक्स से

:

http://docs.angularjs.org/api/ngMock.$httpBackend

जवाब - {समारोह ([स्थिति,] डेटा [, हेडर]) | समारोह (समारोह (विधि, यूआरएल, डेटा, हेडर)} - प्रतिक्रिया विधि स्थिर डेटा का एक सेट वापस करने के लिए या एक समारोह है कि प्रतिसाद स्थिति (संख्या), प्रतिक्रिया डेटा (स्ट्रिंग) और प्रतिक्रिया हेडर (वस्तु) से युक्त एक सरणी लौट सकते हैं लेता है।

तो जैसा कि मैं में इस बात की समझ मामला, आप एक ही अंत करना चाहते हैं पॉइंट बाद के कॉल पर अलग-अलग डेटा लौटाते हैं, आप निम्न की तरह कुछ कोशिश कर सकते हैं। यह सिर्फ एक साधारण काउंटर लागू कर रहा है जो बाद में कॉल पर डेटा स्विच करेगा।

var rssCalled = 0; 

$httpBackend.when('GET', _mockConfig_.FEED_URL).respond(function(method, url, data, headers){ 
    if(rssCalled === 0) { 
     rssCalled++; 
     return [200, feedMock, {}]; 
    } else { 
     return [200, feedMockUpdated, {}]; 
    } 
}); 
+0

यदि आपका टाइपप्रति का उपयोग कर आप की तरह कुछ वापस जाने के लिए होता है [ 200, feedMock, {}]। मुझे समझ में नहीं आता कि रिटर्न वैल्यू को सरणी के रूप में क्यों बनाया गया है, न कि ऑब्जेक्ट – rob

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