2013-11-04 10 views
5

मैं अपने इकाई परीक्षण में से एक में

beforeEach(function() { 
    angular.mock.inject(function ($injector) { 
     $httpBackend = $injector.get('$httpBackend'); 
     mockUserResource = $injector.get('User'); 
     $httpProvider = $injector.get('$httpProvider'); // <-- problem 
     $httpProvider.interceptors.push('myInterceptor'); 
    }); 
}); 

(demo) करने के लिए

क्यों यह संभव नहीं है कोशिश कर रहा हूँ $ httpProvider इंजेक्षन?

कारण मैं ऐसा कर रहा हूं क्योंकि मैं फ़ाइल को लोड नहीं करता जो मेरे सभी इंटरसेप्टर्स को जोड़ता है, क्योंकि मैं उन्हें एक-एक करके परीक्षण करना चाहता हूं!

+0

शीर्ष पायदान प्रश्न के लिए, इतनी संक्षिप्त और खोजना आसान है! मुझे यह सही समस्या थी। – Breedly

उत्तर

10

प्रदाता केवल कॉन्फ़िगर चरण, angular.config में इंजेक्शन योग्य हैं।

this answer के अनुसार, आप की तरह कुछ की कोशिश कर सकते:

beforeEach(module('yourModule', function($httpProvider) { 
    $httpProvider.interceptors.push('myInterceptor'); 
})); 

beforeEach(function() { 
    angular.mock.inject(function($injector) { 
    $httpBackend = $injector.get('$httpBackend'); 
    mockUserResource = $injector.get('User'); 
    }); 
}); 

कैसे निर्भरता इंजेक्शन काम करता है, this एक महान लेख है पर अधिक जानकारी (AngularJS टीम द्वारा नहीं लिखा)

1

नाम Provider स्वचालित रूप से कोणीय द्वारा जोड़ा जाता है। तो, आपको बस $http इंजेक्ट करना चाहिए।

$httpProvider = $injector.get('$http'); 

यहां working fork of your fiddle है।

+0

यह सही है, बस जोड़ना चाहता था कि आप यूनिट परीक्षणों में वास्तविक HTTP अनुरोधों से बचना चाहें। –

+5

मुझे लगता है कि आप भूल रहे हैं कि वह इंटरसेप्टर्स का उपयोग करके '$ httpProvider' को कॉन्फ़िगर करना चाहता है। वह '$ http' सेवा इंजेक्ट नहीं कर रहा है। –

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