2014-07-16 10 views
8

इसके बजाय तरह मैन्युअल रूप से एक नकली सेवा बनाने की में AngularJS सेवा ठूंठसिनोन टेस्ट

$controller('mycontroller', { $scope: scope, myService: mockService }); 

मैं कैसे बाहर ठूंठ कर सकते हैं मेरे साइनऑन का उपयोग करके वास्तविक सेवा और उस स्टबड सेवा को इंजेक्ट करें जहां "मॉक सेवा" को ऊपर मेरे नियंत्रक में इंजेक्शन दिया जा रहा है? अगर मेरी सेवा विधियों का नाम बदल दिया जाए तो मैं अपनी असली सेवा को बाहर करना चाहता हूं तो मेरे नियंत्रक परीक्षण मेरे सेवा परीक्षणों के साथ असफल हो जाएंगे।

अग्रिम धन्यवाद और मुझे उम्मीद है कि यह समझ में आता है।

उत्तर

15

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

मैं हमेशा एक सिनोन सैंडबॉक्स और उस पर नकली चीजें बना सकते हैं - तो में प्रत्येक परीक्षा के बाद आप सभी मज़ाक उड़ाया तरीकों बहाल कर सकते हैं

var sandbox, myService, somethingUnderTest; 

beforeEach(module('myModule')); 

describe('something', function() { 
    beforeEach(inject(function ($injector) { 
     sandbox = sinon.sandbox.create(); 
     myService = $injector.get('myService'); 
     somethingUnderTest = $injector.get('somethingUnderTest'); 
    })); 

    afterEach(function() { 
     sandbox.restore(); 
    }); 

    it('should be defined', function() { 
     expect(somethingUnderTest).to.exist; 
    }); 

    describe('someMethod', function() { 
     it('should call the start method on myService', function() { 
      sandbox.stub(myService, 'start'); 

      somethingUnderTest.start(); 

      expect(myService.start.calledOnce).to.equal(true); 
     }); 
    }); 
}); 
संबंधित मुद्दे