Para probar una directiva de validación angularjs personalizada.

Esta directiva de validación personalizada es un ejemplo presentado en el sitio angular oficial.http://docs.angularjs.org/guide/forms Comprueba si una entrada de texto está en formato numérico o no.

var INTEGER_REGEXP = /^\-?\d*$/;
app.directive('integer', function() {
  return {
    require: 'ngModel',
    link: function(scope, elm, attrs, ctrl) {
      ctrl.$parsers.unshift(function(viewValue) {
        if (INTEGER_REGEXP.test(viewValue)) {
          // it is valid
          ctrl.$setValidity('integer', true);
          return viewValue;
        } else {
          // it is invalid, return undefined (no model update)
          ctrl.$setValidity('integer', false);
          return undefined;
        }
      });
    }
  };
});

Para hacer una prueba unitaria de este código, escribí esto:

describe('directives', function() {
  beforeEach(module('exampleDirective'));

  describe('integer', function() {
    it('should validate an integer', function() {
      inject(function($compile, $rootScope) {
        var element = angular.element(
          '<form name="form">' +
            '<input ng-model="someNum" name="someNum" integer>' +
          '</form>'
          );
        $compile(element)($rootScope);
        $rootScope.$digest();
        element.find('input').val(5);
        expect($rootScope.someNum).toEqual(5);
      });
    });
  });
});

Entonces me sale este error:

Expected undefined to equal 5.
Error: Expected undefined to equal 5.

Pongo declaraciones impresas en todas partes para ver qué está pasando, y parece que la directiva nunca se llama. ¿Cuál es una forma adecuada de probar una directiva simple como esta?

Respuestas a la pregunta(3)

Su respuesta a la pregunta