1

Ich habe eine Richtlinie, die die $routeParams der Seite als solche Zugriffe:

myApp.directive("myList", function ($routeParams) { 
    return { 
     restrict: 'E', 
     templateUrl: 'tabs/my-list.html', 
     link: function (scope) { 
      scope.year = $routeParams.year; 
     } 
    }; 
}); 

Die Richtlinie wie erwartet funktioniert und korrekt die $routeParams

greift ich zu testen, ich versuche, mit eckig/Jasmin. Ich kann nicht herausfinden, wie man Schein $routeParams an die Richtlinie weitergibt. Das ist, was ich habe:

describe('myList', function() { 
    var scope, compile, element, compiledDirective; 
    var mockParams = { 'year': 1996 }; 

    beforeEach(function() { 
     module('templates', 'MyApp'); 

     inject(function ($compile, $rootScope, $routeParams) { 
      compile = $compile; 
      scope = $rootScope.$new(); 
     }); 
     element = angular.element('<my-list></my-list>'); 
     compiledDirective = compile(element)(scope); 
     scope.$digest(); 
    }); 
    it('should fill in the year', function() { 
     expect(scope.year).toEqual(mockParams.year); 
    }); 
}); 

die offensichtlich nicht funktioniert, weil ich nie an die Richtlinie verabschiedet mockParams geben. Gibt es eine Möglichkeit, dies zu tun?

+0

Wie wäre es mit '$ routeParams.year = 1996;' vor der Erstellung des Elements? –

Antwort

2

Mock das Objekt $routeParamsmockParams Verwendung angular.extendORmockParams Objekt direkt zu $routeParams ordnen. Auf diese Weise wird $routeParams verfügbar sein, bevor die Direktive kompiliert wird.

inject(function ($compile, $rootScope, $routeParams) { 
    compile = $compile; 
    scope = $rootScope.$new(); 
    angular.extend($routeParams, mockParams); 
});