Javascript 以编程方式单击<;A>;来自AngularJS指令中的单元测试

Javascript 以编程方式单击<;A>;来自AngularJS指令中的单元测试,javascript,angularjs,unit-testing,angularjs-directive,Javascript,Angularjs,Unit Testing,Angularjs Directive,我有以下AngularJS指令工作正常: angular.module('kerrb.components').directive('krbMinimalizeSidebar', krbMinimalizeSidebar); function krbMinimalizeSidebar($timeout) { return { // restricted to use as an attribute only restrict: 'A', template: '<a class

我有以下AngularJS指令工作正常:

angular.module('kerrb.components').directive('krbMinimalizeSidebar', krbMinimalizeSidebar);

function krbMinimalizeSidebar($timeout) {
return {
  // restricted to use as an attribute only
  restrict: 'A',
  template: '<a class="navbar-minimalize minimalize-styl-2 btn btn-primary "
              href="" ng-click="minimalize()"><i class="fa fa-bars"></i></a>',
  controller: ['$scope', '$element', function ($scope, $element) {
    $scope.minimalize = function () {
        // snipped for brevity
    };
  }]
};
}

krbMinimalizeSidebar.$inject = ['$timeout'];
以及控制台上的输出:

': 1'
': <a class="navbar-minimalize minimalize-styl-2 btn btn-primary " href="" ng-click="minimalize()"><i class="fa fa-bars"></i></a>'
': A'

    TypeError: 'undefined' is not a function (evaluating 'anchor[0].click()')
”:1
': '
“:A”
TypeError:“undefined”不是函数(正在计算“锚点[0]。单击()”)

一切似乎都是正确的。。。为什么click()不能在DOM元素上工作?

Angular的元素实现没有click()函数。(请参阅。)相反,您有两个选项:

  • 包括jQuery。如果加载了jQuery,Angular的元素对象将自动替换为包含click()函数的jQuery实现。但是,如果您的应用程序由于其他原因没有使用jQuery,这将是一个非最佳解决方案,因为它将在您将部署的不同配置中测试您的应用程序
  • 调用
    triggerHandler('click')
    而不是
    click()
    triggerHandler
    函数调用指定事件的所有侦听器。就你而言:

    anchor[0]。triggerHandler('click')

    …应调用ng click处理程序


  • 对jQuery的良好访问。。。我没有用它,但它的一部分工作。“triggerHandler(“”)”是我所需要的,因为即使使用jQuery也不能做到这一点。试图让我的存根工作,所以现在我可以测试函数是否被调用。我在函数中添加了一个Console.Log(),可以看到它正在被调用,但是我的存根没有捕获它。我会继续挖下去。。。
    ': 1'
    ': <a class="navbar-minimalize minimalize-styl-2 btn btn-primary " href="" ng-click="minimalize()"><i class="fa fa-bars"></i></a>'
    ': A'
    
        TypeError: 'undefined' is not a function (evaluating 'anchor[0].click()')