Angularjs 如何触发';键控';Jasmine和Phantomjs角度单元测试中的事件

Angularjs 如何触发';键控';Jasmine和Phantomjs角度单元测试中的事件,angularjs,jasmine,phantomjs,keyup,eventtrigger,Angularjs,Jasmine,Phantomjs,Keyup,Eventtrigger,我想测试我的指令,这里是: function passwordMatch($timeout) { return { require: 'ngModel', link: function (scope, elem, attrs, ctrl) { var firstPassword = '#' + attrs.passwordMatch; elem.add(firstPassword).on('keyup', function () { s

我想测试我的指令,这里是:

function passwordMatch($timeout) {
  return {
    require: 'ngModel',
    link: function (scope, elem, attrs, ctrl) {
      var firstPassword = '#' + attrs.passwordMatch;
      elem.add(firstPassword).on('keyup', function () {
        scope.$apply(function () {
          var isMatch = elem.val() === $(firstPassword).val();
          $timeout(function(){
            ctrl.$setValidity('passwordMatch', isMatch);
          })
        });
      });
    }
  }
}
要测试“passwordMatch”指令,我需要在jasmine测试文件中触发“keyup”事件。 这是我的茉莉花代码:

describe('directives', function() {
  var scope;
  var compile;
  var form;

  beforeEach(module('formValidation'));
  beforeEach(inject(function(_$compile_, _$rootScope_) {
    scope = _$rootScope_.$new();
    var element = angular.element(
      '<form name="form">' +
      '<input type="email" ng-model="model.email" name="email" email-validate />' +
      '<input ng-model="model.password" name="password" password-validate />' +
      '<input ng-model="model.confirm_password" name="confirm_password" password-match="password" />' +
      '<input ng-model="model.phone" name="phone" number-only />' +
      '<input ng-model="model.zipCode" name="zipCode" contain-number />' +
      '</form>'
    );
    scope.model = {
      email: null,
      password: null,
      confirm_password: null,
      phone: null,
      zipCode: null
    };
    compile = _$compile_;
    compile(element)(scope);
    scope.$digest();
    form = scope.form;
  }));

  describe('passwordMatch', function() {
    it('should not pass without match', function() {
      form.password.$setViewValue('1234567');
      form.confirm_password.$setViewValue('7654321');
      // need trigger 'keyup' event here
      expect(form.confirm_password.$valid).toBe(false);
    });
  });

})
description('指令',函数()){
var范围;
var编译;
var形式;
在每个模块之前(模块(‘formValidation’);
beforeach(注入函数($compile,$rootScope){
scope=\$rootScope\$new();
变量元素=角度元素(
'' +
'' +
'' +
'' +
'' +
'' +
''
);
scope.model={
电子邮件:空,
密码:null,
确认密码:空,
电话:空,
zipCode:null
};
compile=\$compile;
编制(要素)(范围);
范围。$digest();
form=scope.form;
}));
description('passwordMatch',function()){
它('不应在不匹配的情况下通过',函数(){
表单.密码.$setViewValue('1234567');
表单。确认密码。$setViewValue('7654321');
//这里需要触发“keyup”事件
expect(form.confirm_password.$valid).toBe(false);
});
});
})

我试图为此编写单元测试,但无法成功触发keyup事件。我想知道是否有人能解决我的问题。

jasmine版本是2.0首先获取要触发keyup事件的元素的引用,然后调用:$element.triggerHandler('keyup');