2013-09-10 18 views
10

मेरे पास एक सेवा है, 'इनपुट', मॉड्यूल 'पट्स' में परिभाषित है, जो दूसरी सेवा, 'इनपुट निर्माता' पर निर्भर करती है। इनपुट सेवा का परीक्षण करने के लिए मुझे इनपुट निर्माता सेवा को स्टब करने की आवश्यकता है।नकली कोणीय सेवा निर्भरताओं इंजेक्शन

जैसा कि मैं answer here समझता हूं, मुझे अपनी स्टब सेवा युक्त एक मॉड्यूल बनाना चाहिए, फिर एक नया 'टेस्ट' मॉड्यूल बनाएं, परीक्षण के तहत मॉड्यूल निर्दिष्ट करें और फिर स्टब मॉड्यूल निर्भरता के रूप में निर्दिष्ट करें। और फिर इंजेक्टर से सेवा खींचें। इसलिए जैसा: '- इनपुट अज्ञात InputsProvider <'

beforeEach(function() { 

    angular.module.('Puts'); // contains the service 'Inputs' 

    angular.module('Mocks',[]) 
    .service('InputCreator',function(){ 
     var mockInputs = { 
     //stubbed behaviour goes here 
     }; 
     return mockInputs; 
    }); 
    }); 

    angular.module('Test',['Puts', 'Mocks']; 

    inject(function($injector){ 
    Inputs = $injector.get('Inputs'); 
    }); 
}); 

हालांकि, इंजेक्टर समारोह के साथ प्रतिक्रिया करता है।

मैं कहां से भटक गया हूं?

धन्यवाद!

उत्तर

21

यह समझने के बाद, मैंने सोचा कि मैं अपने प्रश्न का उत्तर दूंगा। ऊपर की बड़ी गलती angular.mock.module की बजाय angular.module का उपयोग कर रही थी, जो कि कोणीय-नकली द्वारा मॉड्यूल के रूप में संदर्भित सुविधा है। वे बिल्कुल वही बात नहीं हैं!

इसके अतिरिक्त, यह कोणीय.mock.module के साथ नकली सेवा शुरू करने के लिए पर्याप्त है, जब तक आप परीक्षण के तहत मॉड्यूल प्रारंभ करने से पहले ऐसा करते हैं। ऊपर दिए गए प्रश्न में सुझाए गए अनुसार 'तीसरे मॉड्यूल में मॉड्यूल को लपेटने' की कोई ज़रूरत नहीं है। बुद्धि के लिए: निर्भरता मॉड्यूल पहले से मौजूद है

describe("Test Service", function() { 
    var TestService, getvaluestub; 

    beforeEach(function() { 

    // create mock service 
    var mock = {getvalue:function(){}} 

    angular.module('dependencymodule',[]) 
     .service('dependencyservice',function() { 
     return mock; 
     }); 

    //mock the function we are stubbing, (that, in this case, returns value 4) 
    getvaluestub = sinon.stub(mock,'getvalue')returns(4); 

    //instantiate your mock service 
    module('dependencymodule'); 

    //instantiate the module of the service under test, 
    //that depends on 'dependencyservice' mocked above 
    //(ie - testmodule includes the  service 'testservice') 
    module('testmodule'); 

    //inject your test service for testing 
    inject(function ($injector) { 
     TestService = $injector.get('testservice'); 
    }) 

    //tests go here..... 

हैं, तो आप या तो अभी भी सब से ऊपर की कर सकता है, या आप $ इंजेक्टर से सेवा प्राप्त कर सकता है अपने जासूसों और स्टब्स डालें, और> तो < का दृष्टांत परीक्षण के तहत सेवा। यह महत्वपूर्ण है कि जासूस/स्टब्स सेट हो जाएं> < से पहले निर्भर सेवा तत्काल हो जाती है, या यह उनके बिना तत्काल हो जाएगी। ऐसा लगता है:

describe("Test Service", function() { 
    var TestService, DependencyService, getvaluestub; 

    beforeEach(function() { 

    // these modules are specified in the application 
    module('dependencymodule'); 
    module('testmodule'); 

    inject(function ($injector) { 
     DependencyService = $injector.get('testservice'); 

     getvaluestub = sinon.stub(DependencyService,'getvalue').returns(4); 

     OtherService = $injector.get('otherservice'); 
    }) 
    }); 

// test go here 

तो, आप वहां जाते हैं। उम्मीद है कि यह किसी ऐसे व्यक्ति के लिए उपयोगी है जो 'कोणीय सेवाओं में इंजेक्शन मोक्स' की खोज करता है।

+0

इसके लिए आपको बहुत बहुत धन्यवाद! सेवा के लिए स्टब का उपयोग करके सेवा, नियंत्रक और फ़िल्टर का परीक्षण करने का एक और उदाहरण यहां दिया गया है। https://gist.github.com/clouddueling/11188718 –

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