2013-06-24 53 views
1

不工作我有这个小HTML文件:jQuery的验证单元测试

<html> 
    <head></head> 
    <body> 
     <form id='MyForm'> 
      <input type='text' required /> 
      <input type='submit' /> 
     </form> 

     <script src="/js/jquery-1.9.0.js"></script> 
     <script src="/js/jquery.validate.js"></script> 
     <script> 
      var validator = $("#MyForm").validate(); 
      alert(validator.form()); 
     </script> 
    </body> 
</html> 

这提醒我“假”,这是预期的行为。

问题是当我去单元测试,用JS测试驱动程序:

TestCase("MyTests", { 

    setUp: function() { 
     this.myform = "<form id='MyForm'><input type='text' required /><input type='submit' /></form>"; 

     this.validator = $(this.myform).validate(); 
     jstestdriver.console.log("Does the form validate? " + this.validator.form()); 
    }, 

    test_empty: function() { 
    }, 

}); 

此代码返回我的字符串

是否形式验证? true

这是我的项目的简化版本当然,但重点是我似乎无法单元测试验证模块即时通讯开发,因为jQuery验证插件似乎无法正常工作。我错过了什么?

回答

0

尝试.valid()这是触发测试并获得代表形式的有效性的布尔值的正确方法。

<script> 
     var validator = $("#MyForm").validate(); 
     alert($("#MyForm").valid()); 
</script> 

//// 

this.validator = $(this.myform).validate(); 
jstestdriver.console.log("Does the form validate? " + $(this.myform).valid()); 
+0

'有效()'也给了我TRUE;在测试和'FALSE'手动 –

0

我发现了!显然,插件bz默认忽略了“.hidden”输入。在jQuery医生说,

Elements can be considered hidden for several reasons: 

- They have a CSS display value of none. 
- They are form elements with type="hidden". 
- Their width and height are explicitly set to 0. 
- An ancestor element is hidden, so the element is not shown on the page. 

因为单元测试是浏览器的少,输入元素达到这个要求,因此其中由验证插件忽视!

=)

1

如恩里克提到的,问题是关系到jQuery的:hidden选择器。

修复:

$.validator.setDefaults({ ignore: "" }); 
var validator = $("#MyForm").validate(); 
alert($("#MyForm").valid());