Невозможно получить доступ к изолированной области директивы в тесте Жасмин

0

Мне нужно получить доступ к области изоляции директивы, чтобы проверить содержащиеся в ней функции. Я пробовал все решения, которые я нашел из SO. Проблема заключается в области выделения директивы, потому что, если я не настрою директиву с областью выделения, тесты работают нормально.

Моя директива выглядит так:

angular.module('validators').directive('validateName', [function() {

    var directive = {};

    directive.restrict = "A";
    directive.require = 'ngModel';
    directive.scope = {};

    directive.link = function(scope, element, attrs, ngModel) {

        scope.checkIfGoodCharactersOnly = function(name) {

            if ( name.match(/[0-9!$%^&*@#()_+|~='{}\[\]:";'<>?,.\/]/g) )  {
                return false;
            } else {
                return true;
            }

        };

    };

    return directive;

}]);

Настройка тестирования выглядит так:

beforeEach(module('validators'));

    describe('Directive: validateName', function () {

        var $scope, elem;

        beforeEach(

            inject(function ($compile, $rootScope) {

                $scope = $rootScope.$new();

                elem = angular.element('<form name="form">' +
                '<input name="name" ng-model="transaction.name" validate-name />' +
                '</form>');

                elem = $compile(elem)($scope);

                $scope = elem.isolateScope();

        }));

        describe("Link", function() {

            it("Should call checkIfGoodCharactersOnly", function() {
                 expect($scope.checkIfGoodCharactersOnly("abcd")).toEqual(true);
            });

        });

    });

Выход в консоли:

TypeError: "undefined" не является объектом (оценивая "$ scope.checkIfGoodCharactersOnly")

Теги:
jasmine
angularjs-directive

1 ответ

1

Поскольку элемент формы обертывает вход, я пытался получить доступ к области действия элемента формы, которого не существует.

Это сработало:

input = elem.find('input');
expect(input.isolateScope()).toBeDefined();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню