2015-09-02 9 views
5

में मुझे किसी विशेष नियंत्रक को परीक्षण लागू करने की आवश्यकता है।गुंजाइश से कार्य का परीक्षण कैसे करें और AngularJS यूनिट परीक्षण

परीक्षण इस नियंत्रक ठीक है:

angular.module('app', []).controller('PasswordController', function PasswordController($scope) { 
    $scope.password = ''; 

    $scope.grade = function() { 
     var size = $scope.password.length; 
     if (size > 8) { 
      $scope.strength = 'strong'; 
     } else if (size > 3) { 
      $scope.strength = 'medium'; 
     } else { 
      $scope.strength = 'weak'; 
     } 
    }; 
}); 

लेकिन मैं परीक्षण करना चाहते हैं:

describe('Test', function() { 

    beforeEach(module('app')); 

    var MainCtrl, scope; 

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

    it('Should not throw Exception', function() { 
     scope.password = 'abc'; 
     var call = function() { 
      MainCtrl.grade(); 
     } 
     expect(call).not.toThrow(); 
    }); 
}); 

:

angular.module('app', []).controller('PasswordController', function PasswordController($scope) { 


    var vm = this; 
    vm.password = ''; 

    function grade() { 
     var size = vm.password.length; 
     if (size > 8) { 
      vm.strength = 'strong'; 
     } else if (size > 3) { 
      vm.strength = 'medium'; 
     } else { 
      vm.strength = 'weak'; 
     } 
    }; 
}); 

मैं नीचे दिए गए कोड का उपयोग कर नियंत्रक का परीक्षण करने की कोशिश की लेकिन मुझे यह त्रुटि मिलती है: अपेक्षित फ़ंक्शन फेंकने के लिए नहीं, लेकिन यह TypeError फेंक दिया: 'अपरिभाषित' एक समारोह में n है ('MainCtrl.grade()' का मूल्यांकन)।

यह stackOverflow Question मुझे 'इस' के अंदर कार्य करने के लिए परीक्षण लागू करने में मेरी सहायता करें। लेकिन मैं $ गुंजाइश और 'इस' से बाहर काम करता है परीक्षण करना चाहते हैं ...

कोई कैसे इस नियंत्रक से इकाई परीक्षण लागू करने के लिए आइडिया?

उत्तर

1

ग्रेड विधि नियंत्रक से जुड़ी नहीं जा रहा है;

vm.grade = grade; 

Working Plunkr

+0

मुझे लगता है कि ओपी जानबूझकर विधि रखा "निजी"। इसे परीक्षण करने के लिए इसे सार्वजनिक बनाना इसे मेरे लिए सही नहीं लगता है। – alecxe

+0

तो, मैं एक विधि का परीक्षण नहीं कर सकता जो नियंत्रक से जुड़ा नहीं जा रहा है ??? –

+0

यदि आप इसे सीधे परीक्षण करना चाहते हैं, तो इसे किसी तरह से अवगत कराया जाना चाहिए। यदि इसे नियंत्रक के भीतर से दूसरी कार्रवाई से कहा जाता है, तो इसे सत्यापित किया जा सकता है। उदाहरण के लिए, यदि आपके पास ग्रेड विधि को निष्पादित करने वाले vm.password पर एक वॉचर था, तो आप पावर प्रॉपर्टी को सत्यापित करने में सक्षम होंगे कि यह डाइजेस्ट के बाद क्या होना चाहिए। –

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