2012-10-02 5 views
8

मैं अपने ऐप के लिए कुछ परीक्षण लिख रहा हूं, और मैंने angularjs-mocks.js को शामिल किया है, इसलिए मैं इसके साथ आने वाले अच्छे डीएसएल कार्यों का उपयोग कर सकता हूं।वास्तव में कुछ भी मजाक किए बिना angularjs mocks का उपयोग

लेकिन मैं वास्तव में $ http अनुरोधों का नकल नहीं करना चाहता, क्योंकि मैं इस ऐप को क्लाइंट के बैकएंड के साथ एकीकृत कर रहा हूं जो लगातार प्रवाह में है, और मैं वास्तविक प्रतिक्रियाओं के खिलाफ परीक्षण करना चाहता हूं।

इस स्थिति में असली http बैकएंड का उपयोग करने का सबसे अच्छा (आसान तरीका) क्या है?

संपादित करें:

$httpBackend.whenPOST(/.*/).passThrough() 

लेकिन जैसा कि मैंने नीचे उल्लेख है, यह काम नहीं कर रहा संभवतः टूटा:

मैं एक संभावित समाधान है, इस का उपयोग करने के लिए है जो मिल गया है? कोणीय में लाइन जहां $ httpBackend ओवरराइड की गई है (1365 बाहर टिप्पणी करते हुए: https://github.com/angular/angular.js/issues/1434

+0

आप हमेशा एक सामान्य जावास्क्रिप्ट बनाकर इंजेक्ट करने के लिए एक नकली $ http बना सकते हैं जो XHR http अनुरोध करता है, कोई कोणीय मैक आवश्यक नहीं है। जावास्क्रिप्ट में परीक्षण के बारे में यह अच्छी बात है, आप वस्तुओं को एक साथ थप्पड़ मार सकते हैं और उन्हें इंजेक्ट कर सकते हैं हालांकि आप गतिशील टाइपिंग के कारण कृपया। –

+0

ठीक है, लेकिन समस्या यह है कि angularmocks $ httpBackend ओवरराइड करता है, जो $ http का उपयोग करता है। अब मैं इसे $ httpBackend.whenGET (/.*/) के साथ प्राप्त करने की कोशिश कर रहा हूं। PassThrough(), लेकिन ऐसा लगता है कि तो टूटा हुआ है, या मैं इसे सही तरीके से उपयोग नहीं कर रहा हूं। – doubledriscoll

+0

मुझे लगता है कि मैं जो सुझाव दे रहा हूं वह है कि आप वनीला जेएस का उपयोग केवल उस ऑब्जेक्ट को बनाने के लिए कर सकते हैं जिस पर आपको आवश्यकता है। कोई कोणीय नकली की आवश्यकता नहीं है। –

उत्तर

2

मैं इस समस्या के लिए एक त्वरित और गंदे समाधान पता लगा:

Error: Unexpected request: POST /some/url/here No more request expected 

मैं यहाँ एक मुद्दा खोल दिया है: मैं इस त्रुटि मिलती है -mocks-1.0.2.js)।

angular.module('ngMock', ['ng']).provider({ 
    $browser: angular.mock.$BrowserProvider, 
    $exceptionHandler: angular.mock.$ExceptionHandlerProvider, 
    $log: angular.mock.$LogProvider, 
    //$httpBackend: angular.mock.$HttpBackendProvider, 
    $rootElement: angular.mock.$RootElementProvider 
}).config(function($provide) { 
    $provide.decorator('$timeout', function($delegate, $browser) { 
    $delegate.flush = function() { 
     $browser.defer.flush(); 
    }; 
    return $delegate; 
    }); 
}); 

यह शायद कुछ और ही टूट जाता है, लेकिन यह मेरे परीक्षण है कि मैं क्या परीक्षण की आवश्यकता की सुविधा देता है, और उत्पादन एप्लिकेशन को प्रभावित नहीं करता, तो यह मेरे साथ ठीक है। उम्मीद है कि भविष्य में ऐसा करने के लिए एक तरह से बनाया जाएगा।

+0

यह बहुत बदसूरत है। यह दुखद है कि कोई बेहतर तरीका नहीं है .. – stej

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