11

Próbuję dostępu zakresie sterownika dołączony z ** mój zwyczaj kątowe dyrektywa ** gdy testowanie w jaśminu.Get zakresu regulatora niestandardowe dyrektywy w teście Jasmine

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

Chcę napisać test w jaśminie, aby sprawdzić, czy zdefiniowano metodę clickMe, czy nie.

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); } 

W beforeEach() oświadczyłem zakresu i dscope zmienne następujące:

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(); })); 

Ale kiedy uruchomić test, mam * i oczekiwać "oczekiwać false aby mogło być prawdziwe." niezdefiniowany nie być null dla scope.message

Odpowiedz

16

Jeśli używasz kątowa 1.2+, trzeba użyć ...

dscope = element.isolateScope(); 

zamiast ...

dscope = element.scope(); 

dostęp do izolowanych zakresów. Nie mogę stwierdzić, czy twój zasięg jest odizolowany, ponieważ w pytaniu pominięto deklarację zakresu dyrektywy, ale wyobrażam sobie, że to się tutaj dzieje.

Zobacz this problem na Github o wyjaśnienie różnicy między .scope() i .isolateScope()

+2

Dziękuję bardzo! Byłem zły na wszystkie przykłady, które nie działały !! – achedeuzot

+1

Dzięki za pytanie i odpowiedź :) –

Powiązane problemy