小编liz*_*ter的帖子

在angularjs中测试指令时如何模拟模糊?

问题

我正在尝试测试一些指令(下面的代码).其中之一是"电子邮件"(在代码(挪威语))指令中称为"epost".解决这个问题应该适用于所有这些,所以我暂时保留它.

技术:Angularjs,Jasmine,Requirejs,(在Chrome中运行的咕噜声和业力)

该指令以两种方式验证电子邮件地址; 在升档和模糊.我可以毫无问题地测试升档,你可以在下面的测试中看到,但我无法弄清楚如何模拟模糊,因此指令中的bind('blur')运行.

我做了什么

我试图捕获这样的编译元素:

elem    = angular.element(html);
element = $compile(elem)($scope);
Run Code Online (Sandbox Code Playgroud)

然后在测试中我尝试了几种排列,以便在指令中的bind函数内部使用控制台日志来触发模糊.以下都不适用.它不会触发.

elem.trigger('blur');           
element.trigger('blur');
elem.triggerHandler('blur');
element.triggerHandler('blur');
element.blur();
elem.blur();
Run Code Online (Sandbox Code Playgroud)

我基于注入和设置:测试自定义验证angularjs指令

angularjs中的email指令包含在requirejs中

define(function() {

var Directive = function() {

return {
  require: 'ngModel',
  link: function(scope, elem, attrs, ctrl) {
    var pattern = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/;

    elem.bind('blur', function() {
      scope.$apply(function () {
        if (!elem.val() || pattern.test(elem.val())) {
          ctrl.$setValidity('epost', true);
        } else {
          ctrl.$setValidity('epost', false);
        }
      });
    });

    ctrl.$parsers.unshift(function(viewValue) {
      if (pattern.test(viewValue)) {
        ctrl.$setValidity('epost', true);
        return viewValue;
      } else {
        return …
Run Code Online (Sandbox Code Playgroud)

unit-testing blur jasmine angularjs angularjs-directive

5
推荐指数
1
解决办法
1万
查看次数