Test de l'élément de la directive - ne peut pas accéder isolé champ d'application de méthodes au cours de tests

J'ai la directive suivante.

directivesModule.directive('wikis', function() {
var urlRegex = new RegExp('^(https?)://.+$');

return {
    restrict: 'E', 
    templateUrl: 'templates/wiki-list.html',
    scope: {
        wikis: '='
    },
    link: function(scope, element, attrs) {
        scope.newWikiURL = '';

        scope.$watch('wikis', function() {
            if (scope.wikis == undefined || scope.wikis.length === 0) {
                scope.class = 'hide';
            } else {
                scope.class = 'show';
            }
        }, false);

        scope.addWiki = function() {
            if (scope.wikis == undefined) {
                scope.wikis = [];
            }

            var nw = scope.newWikiURL;
            if (nw != undefined && nw.trim() != '' && urlRegex.exec(nw)) { 
                scope.wikis.push(nw);
                scope.newWikiURL = '';
            }
        }

    }
};

});

Quand je l'ai tester:

describe('Wikis Directive Test Suite', function() {
    var scope, elem, directive, linkFn, html;

    beforeEach(function() {
        html = '<wikis wikis=''></wikis>';

        inject(function($compile, $rootScope) {
            scope = $rootScope.$new();
            scope.wikis = [];

            elem = angular.element(html);

            $compile(elem)(scope);

            scope.$digest();
        });

    });

    it('add Wiki should add a valid wiki URL to artist', function() {
        var url = 'http://www.foo.com';
        scope.newWikiURL = url;
        scope.addWiki();

        expect(scope.wikis.length).toBe(1);
        expect(scope.wikis[0]).toBe(url);
        expect(scope.newWikiURL).toBe('');
    });
});

Je reçois un message d'erreur indiquant que l'Objet n'a pas de addWiki méthode. J'ai essayé de déboguer, et la fonction de lien n'est pas appelé pendant le test. Je pense que c'est pourquoi le addWiki méthode ne fait pas partie de la portée. Quelqu'un sait pourquoi j'obtiens cette erreur?

En passant, Est-ce une pratique normale pour ajouter un peu de logique dans la fonction de lien d'une directive comme il serait un Contrôleur lui-même? Parce qu'en regardant le code, je sais que c'est pourquoi, en réalité, je suis en train de faire.

InformationsquelleAutor leonfs | 2013-09-10