【发布时间】:2015-05-04 14:16:29
【问题描述】:
我正在尝试为使用链接函数且没有任何关联模板的指令编写单元测试。该指令需要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 的文档后,我尝试使用$provide 服务模拟ngModel,如下所示:
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
}));
我还看到了其他解决方案,它们讨论在范围内创建一个属性,该属性包含在使用您的指令的 HTML 中绑定的任何ngModel(例如solution1、solution2),但这有没有解决我的错误。
【问题讨论】:
标签: javascript angularjs unit-testing