繁体   English   中英

在单元测试中模拟ngModel

[英]Mocking ngModel in unit tests

我正在尝试为使用链接函数的指令编写单元测试,并且没有与之关联的任何模板。 该指令需要像这样的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控制器的错误。 在查看ngModelngModelController的文档后,我尝试使用$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 (例如, solution1solution2 ),但这并没有解决我的情况中的错误。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM