11

Ich versuche, Zugriffsbereich des Controllers mit angebracht ** meiner benutzerdefinierten Winkel Richtlinie ** wenn Tests in Jasmin.Holen Umfang der Controller benutzerdefinierte Richtlinie in Jasmine Test

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

Ich möchte einen Test in Jasmine schreiben, um zu überprüfen, ob die clickMe-Methode definiert ist oder nicht.

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

In before() erklärte ich den Umfang und dScope Variablen wie folgt:

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

Aber wenn ich den Test ausführen, ich * und erwarten "falsch erwarten wahr zu sein." undefined für scope.message

Antwort

16

nicht null zu sein, wenn Sie Angular 1.2+ verwenden, müssen Sie verwenden ...

dscope = element.isolateScope(); 

statt ...

dscope = element.scope(); 

auf isolierte Bereiche zugreifen. Ich kann nicht sagen, ob Ihr Bereich isoliert ist, weil Sie die Bereichsdeklaration Ihrer Anweisung in der Frage weggelassen haben, aber ich könnte mir vorstellen, dass das hier passiert.

Siehe this Ausgabe auf Github für eine Erklärung des Unterschieds zwischen .scope() und .isolateScope()

+2

Ihnen so vielen Dank! Ich wurde wütend mit all den Beispielen, die nicht funktionieren würden !! – achedeuzot

+1

Danke für die Frage & Antwort :) –