2015-02-24 85 views
0

我知道有$controllerProvider可用于在单元测试中创建控制器。然而,我想知道是否有办法在单元测试中模拟指令。嘲笑angularjs单元测试中的指令

背景是,我试图嘲笑(!不创建)应用ngModel的异步验证器的指令。完美会是这样的:

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

有没有办法做到这一点?

回答

0

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

下面是代码:

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; 
    }; 

我仍然有兴趣在如何嘲笑一个完整的指令答案。