在angularjs单元测试中模拟指令

时间:2015-02-24 10:59:41

标签: angularjs unit-testing jasmine

我知道可以使用$controllerProvider来在单元测试中创建控制器。我想知道是否有办法在单元测试中模拟指令。

这样做的背景是,我试图模拟(!不创建)一个将异步验证器应用于ngModel的指令。完美将是这样的:

beforeEach(function () {
   module('myMod', function($directiveProvider) {
      $directiveProvider.register('mockAsyncValidationDirective', function() {
          return {
              restrict: 'EA',
              require: 'ngModel'
              // ...
          }
      });
   });
});

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

我还没有找到模仿指令的方法(可能没有一个atm),但我能够通过表单控制器访问模型控制器来解决我的具体问题。 / p>

以下是代码:

    var scope = $rootScope.$new();

    var html = '<form name="testForm">' +
        '<input type="text" ng-model="username">' +
        '</form>';

    var element = $compile(html)(scope);
    var form = scope.testForm;
    var ngModel = form.username;


    ngModel.$asyncValidators.unique = function (modelValue, viewValue)
    {
        var deferred = $q.defer();
        $timeout(function ()
        {
            if (viewValue === 'NOT_UNIQUE') {
                deferred.reject();

            } else {
                deferred.resolve();
            }
        });
        return deferred.promise;
    };

我仍然会对如何模拟完整指令的答案感兴趣。