11

में कस्टम के निर्देश के नियंत्रक के दायरे जाओ मैं पहुंच क्षेत्र नियंत्रक के साथ संलग्न की कोशिश कर रहा हूँ ** अपने कस्टम कोणीय निर्देश ** जब चमेली में परीक्षण।जैस्मीन परीक्षण

app.directive('MyDirective', function(){ 
return { 
     template:..., 
     scope:..., 
     controller: function($scope){ 
       $scope.clickMe = function() { 
        .... 
        }; 
      $scope.message = ""; 
     } 
} 

मैं क्लिकमे विधि में परिभाषित किया गया है या नहीं, यह सत्यापित करने के लिए मैं जैस्मीन में एक परीक्षण लिखना चाहता हूं।

it('should have 3 methods', function() { 
    expect(dscope).not.toBe(null); 
    expect(scope).not.toBe(null); 
    expect(angular.isFunction(dscope.clickMe)).toBe(true); 
    expect(dscope.message).toBe(true); } 

beforeEach में() मैं इस प्रकार गुंजाइश और dscope चर की घोषणा की:

beforeEach(inject(function( $rootScope, $compile){ 
    scope = $rootScope.$new();  

    element = angular.element("<div my-directive></div>"); 

    //bind the empty scope into the directive 
    $compile(element)(scope); 

    //access to internal directive scope of our element 
    dscope = element.scope(); })); 

लेकिन जब मैं परीक्षण चलाने के लिए, मैं * और उम्मीद "सच झूठी उम्मीद करते हैं।" आप कोणीय 1.2+ उपयोग कर रहे हैं scope.message

उत्तर

16

के लिए रिक्त नहीं हो करने के लिए अपरिभाषित, आप का उपयोग करना होगा ...

dscope = element.isolateScope(); 
बजाय

...

dscope = element.scope(); 

अलग कार्यक्षेत्रों का उपयोग करने की। मैं यह नहीं बता सकता कि आपका दायरा अलग है या नहीं, क्योंकि आपने प्रश्न में अपने निर्देश की दायरे की घोषणा छोड़ दी है, लेकिन मुझे लगता है कि यहां क्या हो रहा है।

.scope() और .isolateScope() के बीच अंतर का एक विवरण के लिए Github पर this मुद्दा देखें

+2

बहुत बहुत शुक्रिया! मैं उन सभी उदाहरणों से पागल हो रहा था जो काम नहीं करेंगे !! – achedeuzot

+1

प्रश्न और उत्तर के लिए धन्यवाद :) –

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