2016-02-03 8 views
9

मैं कोणीय के साथ मेटीरजेएस का उपयोग कर रहा हूं और नियंत्रक का परीक्षण करना चाहता हूं। मेरा नियंत्रक $ प्रतिक्रियाशील (यह) .attach ($ स्कोप) का उपयोग करें। मुझे यह जांचने की ज़रूरत है, अगर इस विधि को बुलाया गया था।जैस्मीन spyOn फ़ंक्शन पर और ऑब्जेक्ट लौटा

मुझे लगता है कि जासूसी के लिए की तरह कुछ बनाने के लिए:

var $reactive = function(ctrl) { 
    return { 
     attach:function(scope) {} 
    } 
}; 

तो मैं ऐसा कॉल कर सकते हैं:

$reactive('aaa').attach('bbb'); 

मैं इसे कैसे परीक्षण में कर सकते हैं?

spyOn($reactive, 'attach'); 

काम नहीं करता है। मुझे त्रुटि मिली: संलग्न() विधि मौजूद नहीं है

और यह कैसे जांचें कि इसे कॉल किया गया है या नहीं? यह अच्छी कॉल है?

expect($reactive).toHaveBeenCalledWith(controller); 

और उस फ़ंक्शन अटैच को कैसे जांचें, तर्क (दायरा) के साथ कहा जाता था?

+0

'$ reactive' एक वस्तु विधि देते हैं, ठीक है, जो देता है की तरह लग रहा:

var reactiveResult = jasmine.createSpyObj('reactiveResult', ['attach']); var $reactive = jasmine.createSpy('$reactive').and.returnValue(reactiveResult); var controller = {}; beforeEach(function() { module(function ($provide) { $provide.factory('$reactive', $reactive); }); module('yourAppModule'); }); it('Should call attach', function() { $reactive(controller).attach(); expect($reactive).toHaveBeenCalledWith(controller); expect(reactiveResult.attach).toHaveBeenCalled(); }) ; 

आप के लिए नियंत्रक भी निर्भरता $reactive जासूस प्रदान कर सकते हैं? और आप इसे कॉल करने के लिए 'संलग्न' विधि का परीक्षण करना चाहते हैं। – Raulucco

+0

@Raulucco बिल्कुल – psalkowski

उत्तर

4

आपको $reactive घटक नकल करने की आवश्यकता होगी। इसे एक जासूस के साथ बदलें जो परीक्षण के दायरे में spyObj देता है। फिर ट्रिगर करें जो कभी भी चलाने और परीक्षण करने के लिए $reactive विधि बनाता है।

var reactiveResult = jasmine.createSpyObj('reactiveResult', ['attach']); 
var $reactive = jasmine.createSpy('$reactive').and.returnValue(reactiveResult); 
var ctrl; 
    beforeEach(inject(function ($controller) { 
     ctrl = $controller('YourController', {$reactive: $reactive }); 
    })); 

it('Should call attach', function() { 
    //ctrl.triggerThe$reactiveCall 
    expect($reactive).toHaveBeenCalledWith(ctrl); 
    expect(reactiveResult.attach).toHaveBeenCalled(); 
}) ; 
+0

बहुत बहुत धन्यवाद! अब मैं परीक्षणों के बारे में कुछ और जानता हूं। – psalkowski

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