我知道可以使用$controllerProvider来在单元测试中创建控制器。我想知道是否有办法在单元测试中模拟指令。
这样做的背景是,我试图模拟(!不创建)一个将异步验证器应用于ngModel的指令。完美将是这样的:
beforeEach(function () {
module('myMod', function($directiveProvider) {
$directiveProvider.register('mockAsyncValidationDirective', function() {
return {
restrict: 'EA',
require: 'ngModel'
// ...
}
});
});
});
有没有办法做到这一点?
答案 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;
};
我仍然会对如何模拟完整指令的答案感兴趣。