如何进行高效JavaScript单元测试

发表于:2011-12-08 10:39

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Hazem Saleh    来源:51Testing软件测试网采编

  导读:能在一个浏览器上运行的JavaScript并不一定能在其他浏览器上运行。如果没有对代码进行单元测试,那么在决定升级或支持新浏览器的时候,组织就需要花钱测试或重新测试Web应用程序。在本文中,了解JavaScript单元测试如何帮助您降低测试成本,轻松支持更多浏览器。

  一个损坏的JavaScript代码示例

  Web应用程序面临的一个最大挑战是支持不同版本的Web浏览器。能在Safari上运行的JavaScript代码不一定能在Windows? Internet Explorer (IE)、Firefox或Google Chrome上运行。这个挑战的根源是呈现层中的JavaScript代码从一开始就没有进行测试。如果没有对代码进行单元测试,那么在升级或支持新浏览器后,组织可能需要花钱反复测试Web应用程序。本文将展示如何通过高效的JavaScript代码单元测试降低测试成本。

  一个常见用例是登录表单JavaScript验证。考虑清单1中的表单。

  清单 1.登录表单

  • <FORM> 
  •     <table> 
  •         <tr> 
  •             <td>Username</td> 
  •             <td><input type="text" id="username"/></td> 
  •             <td><span id="usernameMessage"></span></td> 
  •         </tr> 
  •         <tr> 
  •             <td>Password</td> 
  •             <td><input type="password" id="password"/></td> 
  •             <td><span id="passwordMessage"></span></td> 
  •         </tr>     
  •         <tr> 
  •             <td><input type="button" onclick="new appnamespace.  
  •             ApplicationUtil().validateLoginForm()" value="Submit"/></td> 
  •         </tr> 
  •     </table> 
  • </FORM>
  •   这个表单很简单,仅包含用户名和密码字段。单击提交按钮时,将通过ApplicationUtil执行一个特定的表单验证。以下是负责验证HTML表单的JavaScript对象。清单2显示了ApplicationUtil对象的代码。

      清单 2.损坏的ApplicationUtil对象代

  • appnamespace = {};  
  • appnamespace.ApplicationUtil = function() {};  
  • appnamespace.ApplicationUtil.prototype.validateLoginForm =  function(){  
  •     var error = true;  
  •     document.getElementById("usernameMessage").innerText = "";  
  •     document.getElementById("passwordMessage").innerText = "";    
  •     if (!document.getElementById("username").value) {  
  •         document.getElementById("usernameMessage").innerText =   
  •         "This field is required";  
  •         error = false;  
  •     }  
  •       
  •     if (!document.getElementById("password").value) {  
  •         document.getElementById("passwordMessage").innerText =   
  •         "This field is required";  
  •         error = false;  
  •     }         
  •     return error;         
  • };
  •   在清单 2中,ApplicationUtil对象提供一个简单验证:用户名和密码字段都已填充。如果某个字段为空,就会显示一条错误消息:This field is required。

      上面的代码能够在Internet Explorer 8和Safari 5.1上工作,但无法在 Firefox 3.6 上工作,原因是Firefox不支持innerText属性。通常,(上述代码和其他类似JavaScript代码中的)主要问题是不容易发现编写的JavaScript代码是不是跨浏览器兼容的。

      这个问题的一个解决方案是进行自动化单元测试,检查代码是不是跨浏览器兼容。

    51/512345>
    《2023软件测试行业现状调查报告》独家发布~

    精彩评论

    • dodmk
      2014-2-20 14:25:02

      没完全看懂~!

    • caixusheng
      2011-12-08 17:14:35

      楼主没讲清楚具体要点,最后的解决办法能不能再补充详细点啊,谢谢

    关注51Testing

    联系我们

    快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

    法律顾问:上海兰迪律师事务所 项棋律师
    版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
    投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

    沪ICP备05003035号

    沪公网安备 31010102002173号