2015-03-03 6 views
2

Я пытаюсь написать модульные тесты для директивы, которая использует функцию ссылки и не имеет никакого связанного с ней шаблона. Директива требует ngModel так:Mocking ngModel в модульных тестах

angular.module('some-module', []).directive('someDirective', function() { 
    return { 
    restrict: 'A', 
    require: 'ngModel', 
    link: function(scope, element, attr, controller) { 
     //Do something 
    } 
    }; 
}); 

При попытке модульного тестирования этого, я просто пытаюсь скомпилировать DIV, чтобы вызвать директиву:

var $scope = $rootScope.$new(); 
var element = $compile('<div some-directive></div>')($scope); 
$scope.$digest(); 

Но это вызывает ошибку, что чем ngModel контроллер не может быть найден. После просмотра документации ngModel и ngModelController Я попытался насмешливо ngModel используя $provide службы, как это:

beforeEach(module(function($provide) { 
    var mockNgModel = {}; 
    $provide.value('ngModel', mockNgModel); //Doesn't work 
    $provide.value('ngModelCtrl', mockNgModel); //Doesn't work 
    $provide.value('ngModel.NgModelController', mockNgModel); //Doesn't work 
    $provide.value('ngModel.ngModelController', mockNgModel); //Doesn't work 
})); 

Я также видел другие решения, которые говорят о создании ресурса в объеме, который содержит все, что ngModel является связанный в HTML, где используется ваша директива (например, solution1, solution2), но это не решило ошибку в моем случае.

ответ

3
var $scope = $rootScope.$new(); 
$scope.foo = 'bar'; 
var element = $compile('<div some-directive ng-model="foo"></div>')($scope); 
$scope.$digest(); 
+0

Я по-прежнему получаю ту же ошибку. Это работает для вас? Если это так, мне может понадобиться определить другую проблему в моем коде. –

+0

Да, это так, проверьте: https://jsfiddle.net/A8Vgk/1232/ Если я одержу ng-модель, я получаю описанную вами ошибку. – HankScorpio

+0

Похоже, ты прав. По какой-то причине он пытается издеваться над «ngModel», который вызывает ошибку. Когда я удаляю эти строки и указываю 'ng-model' в теге HTML, я больше не получаю ошибку. Интересно, если вы не должны пытаться издеваться над «ngModel» в модульных тестах. –

Смежные вопросы