Мне нужно получить доступ к области изоляции директивы, чтобы проверить содержащиеся в ней функции. Я пробовал все решения, которые я нашел из 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")
Поскольку элемент формы обертывает вход, я пытался получить доступ к области действия элемента формы, которого не существует.
Это сработало:
input = elem.find('input');
expect(input.isolateScope()).toBeDefined();