Wie mache ich Spritzen ein mock-Abhängigkeit in eine eckige Richtlinie mit Jasmin Karma

Habe ich die folgende Richtlinie:

function TopLevelMenuDirective ($userDetails, $configuration) {
    return {
        restrict:'A',
        templateUrl: staticFilesUri + 'templates/TopLevelMenu.Template.html', 
        scope: {
            activeTab: '='
        },
        link: function (scope, element, attributes) {
            var userDetails = $userDetails;
            if ($userDetails) {
                scope.user = {
                    name: userDetails.name ? userDetails.name : 'KoBoForm User',
                    avatar: userDetails.gravatar ? userDetails.gravatar: (staticFilesUri + '/img/avatars/example-photo.jpg')
                };
            } else {
                scope.user = {
                    name: 'KoBoForm User',
                    avatar: staticFilesUri + '/img/avatars/example-photo.jpg'
                }
            }

            scope.sections = $configuration.sections();

            scope.isActive = function (name) {
                return name === scope.activeTab ? 'is-active' : '';
            }
        }
    }
}

Möchte ich verspotte die Abhängigkeiten unit-Tests die unterschiedliche code-Pfade mit bekannten Werten, die von den unit-tests. Ich habe folgende Beispiel-unit-test:

it('should set $scope.user to values passed by $userDetails', 
    inject(function($compile) {
        var element = '<div top-level-menu></div>';
        element = $compile(element)($scope);
        $scope.$apply();

        expect(element.isolateScope().user.name).toBe('test name');
        expect(element.isolateScope().user.avatar).toBe('test avatar');
    }
));

Gibt mir zwei Probleme.

Erstens, weil die Vorlage in einer externen Datei, wenn es lädt, versucht es, um es zu Holen und Fehler heraus, weil die Datei ist nirgends zu finden, was logisch ist, da es in einer Testumgebung und nicht auf einen tatsächlichen server.

Zweitens, es gibt keinen offensichtlichen Weg, Sie zu verspotten die Abhängigkeiten injiziert in die Richtlinie über Ihren Konstruktor. Beim testen von Controllern Sie können die $controller service, aber da Richtlinien instanziiert werden indirekt durch die Erstellung einer html-Tags mit übergeben, Umfang, es gibt keine Möglichkeit zu instanziieren Sie es direkt (z.B. es gibt keine Analog $directive). Dies behindert mich von der Einstellung $userDetails.name und $userDetails.gravatar zu 'test name' und 'test avatar' beziehungsweise.

Wie bekomme ich die Richtlinie richtig kompilieren und laufen mit einer custom $userDetails Abhängigkeit?

Schreibe einen Kommentar