2016-08-31 5 views
5

समारोह द्वारा निष्पादित नियंत्रक दायरे में समारोह का परीक्षण करने के:कैसे नियंत्रक में घटना

angular.module('myApp').controller('MyController', function(){ 

    $scope.f = function($event){ 
     $event.preventDefault(); 
     //logic 
     return data; 
    } 
}) 

describe('MyController', function(){ 
    'use strict'; 
    var MyController, 
     $scope; 

    beforeEach(module('myApp')); 

    beforeEach($inject(function($rootScope, $controller){ 
     $scope = $rootScope.$new(); 
     MyController = $controller('MyController', { 
      $scope: $scope 
     }) 
    })); 
}) 
it('should...', function(){ 
    //fire event and expect data 
}) 

$scope.f समारोह निर्देश में प्रयोग किया जाता है, यह द्वारा ng-click="f($event)"

क्रियान्वित किया जा सकता क्या इकाई में आग की घटना के लिए सही तरीका है परीक्षा?

+1

पर preventDefault फोन आप कुछ और प्रासंगिक जानकारी प्रदान कर सके करना चाहिए? –

+0

@EvanBechtol क्षमा करें, मुझे आशा है कि अब यह और स्पष्ट है – rossoneri

उत्तर

4

लघु उत्तर

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

it('should call preventDefault on the given event', function(){ 
    var testEvent = $.Event('someEvent'); 
    $scope.f(testEvent); 
    expect(testEvent.isDefaultPrevented()).toBe(true); 
}); 

निम्नलिखित देखें:

पूर्ण युक्ति

इसके अलावा - अपने it ब्लॉक ख चाहिए ई describe ब्लॉक के अंदर, ताकि उसके पास $scope फ़ील्ड तक पहुंच हो। यह इस तरह से अधिक दिखना चाहिए: संरचना

describe ब्लॉक का उपयोग करने के लिए अपने परीक्षण की संरचना करने के डरो मत के बारे में

describe('MyController', function(){ 
    'use strict'; 
    var MyController, 
     $scope; 

    beforeEach(module('myApp')); 

    beforeEach($inject(function($rootScope, $controller){ 
    $scope = $rootScope.$new(); 
    MyController = $controller('MyController', { 
     $scope: $scope 
    }) 
    })); 

    it('should call preventDefault on the given event', function(){ 
    var testEvent = $.Event('someEvent'); 
    $scope.f(testEvent); 
    expect(testEvent.isDefaultPrevented()).toBe(true); 
    }); 
}) 

एक नोट। कल्पना कीजिए कि आप $scopef2 कहा जाता है पर एक और समारोह था, तो आप शायद अपने कल्पना इस तरह अधिक फ़ाइल विभाजन चाहेगा:

describe('MyController', function(){ 
    'use strict'; 
    var MyController, 
     $scope; 

    beforeEach(module('myApp')); 

    beforeEach($inject(function($rootScope, $controller){ 
    $scope = $rootScope.$new(); 
    MyController = $controller('MyController', { 
     $scope: $scope 
    }) 
    })); 

    describe('$scope', function() { 
    describe('.f()', function() { 
     // tests related to only the .f() function 
    }); 

    describe('.f2()', function() { 
     // tests related to only the .f2() function 
    }); 
    }); 
}) 

यह लाभ है कि जब एक परीक्षण विफल रहता है, जैसा कि आप देख त्रुटि संदेश का निर्माण किया है है describe ब्लॉक के पदानुक्रम के आधार पर। तो यह होगा की तरह कुछ:

MyController $ गुंजाइश करें.एफ़() दिए गए घटना

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