我正在尝试为使用链接函数但没有任何关联模板的指令编写单元测试。该指令需要像这样的 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 Controller 的错误。查看 ngModelngModelController 的文档后,我尝试使用 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
}));

我还看到了其他解决方案,这些解决方案讨论在范围上创建一个属性,该属性包含在使用您的指令的 HTML 中绑定(bind)的任何 ngModel (例如 solution1solution2 ),但这并没有解决我的错误。

最佳答案

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

关于javascript - 在单元测试中模拟 ngModel,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28840114/

10-12 22:08