【问题标题】:Blur a field without using jQuery不使用 jQuery 模糊字段
【发布时间】:2013-08-06 08:20:22
【问题描述】:

我想(单元)测试我的 AngularJS 应用程序而不使用 jQuery,因为 jQuery 将取代 jqLit​​e,而在真正的应用程序中 jQuery 也将不可用。 jQuery 和 jqLit​​e 之间存在真正的区别,因此在单元测试中为 AngularJS 提供 jQuery 是有风险的。

现在我的大部分测试在没有 jQuery 的情况下都可以正常工作,但是我需要模糊一个字段,我只能找出如何使用 jQuery 来完成。我将如何以跨浏览器的方式在 Javascript 中做到这一点?

更新:收到答案后,我使用 triggerHandler() 解决了它,但不是在指令本身中,而是在单元测试中,如下所示:

it("should set the blur state on blur", function() {
    angular.element(elm[0][0]).triggerHandler("blur");
    expect($rootScope.passwordblur).toBe(true);
});

【问题讨论】:

标签: unit-testing angularjs jqlite


【解决方案1】:

为什么不试试指令:

app.directive('blurable', function () {        
        return {
            link: function(scope, element) {               
                element.bind("blur" , function(e){
                    // blur happens
                });
                scope.triggerBlur = function(){
                    element.triggerHandler("blur");
                }
            }
        }
    });

所以现在在您的 scope 中,您可以运行此 triggerBlur 方法进行“手动”模糊。
猛戳:http://plnkr.co/edit/wPqRqh

【讨论】:

  • 不错,以前没见过这个功能!
  • @Maarten 但我不知道这种风格在单元测试环境中是否是一种好习惯......
  • 觉得应该没问题;该单元使用真实事件进行测试,仅模拟触发器,但总是有一定的模拟与存根等......如果其他人不这么认为,请告诉我
猜你喜欢
  • 2015-12-16
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 2014-09-30
相关资源
最近更新 更多