qunit和mockjax前端测试

简介:

qunit是JavaScript的单元测试框架,用起来和junit一样的简单,够可视化。

  通过阅读API和一些测试Demo很快就可以掌握qunit的基本用法。下面是一个测试例子,通过例子来说明qunit的用法,然后就没了。

  • qunit框架使用的一个demo集合

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    <!DOCTYPE html>
    < html >
    < head >
         < meta  charset = "utf-8" >
         < meta  http-equiv = "X-UA-Compatible"  content = "IE=edge,chrome=1" >
         < title >Test JCN.dom.node.util.js</ title >
         < link  href = "../script/jquery/qunit-1.14.0.css"  rel = "stylesheet" />
         <!--
         <script type="text/javascript" src="../script/jquery/jquery-1.8.0.min.js"></script>
         -->
         < script  type = "text/javascript"  src = "../script/jquery/qunit-1.14.0.js" ></ script >
         < script  type = "text/javascript"  src = "JCN.dom.node.util.js" ></ script >
         < script >
             window.onload = function () {
                 var e = document.getElementById("content");
                 var L = function (msg) {
                     console.info("Test Log is : " + msg);
                 };
                 //Test001
                 test("test getStyle", function () {
                     expect(4);
                     //
                     var w = JCN.getStyle(e, "width");
                     var h = JCN.getStyle(e, "height");
                     L(w);
                     L(h);
                     equal(w, "30px", "Test getStyle(element, name) width to match.");
                     equal(h, "20px", "Test getStyle(element, name) height to match.");
                     e.style.width = "30px";
                     e.style.height = "20px";
                     //
                     var w = JCN.getStyle(e, "width");
                     var h = JCN.getStyle(e, "height");
                     L(w);
                     L(h);
                     equal(w, "30px", "Test getStyle(element, name) width to match.");
                     equal(h, "20px", "Test getStyle(element, name) height to match.");
                 });
                 //Test002
                 test("test setElementOpactiy", function () {
                     JCN.setElementOpactiy(e, 0.5);
                     var o = JCN.getStyle(e, "opacity");
                     L(o);
                     equal(o, 0.5, "Test setElementOpactiy(element, opactiy) opactiy to match.");
                 });
                 module("module test", {
                     setup: function () {
                         L("module test setUp");
                     },
                     teardown: function () {
                         L("module test teardown");
                     }
                 });
                 //Test003
                 test("test relativePage", function () {
                     var pageX = JCN.relativePage.pageX(e);
                     var pageY = JCN.relativePage.pageY(e);
                     L("pageX=" + pageX + ", pageY=" + pageY);
                     equal(pageX, 0, "Test pageX.");
                     equal(pageY, 498, "Test pageY.");
                 });
                 //Test004
                 test("test relativeParent", function () {
                     expect(2);
                     var offsetParentX = JCN.relativeParent.parentX(e);
                     var offsetParentY = JCN.relativeParent.parentY(e);
                     L("offsetParentX=" + offsetParentX + ", offsetParentY=" + offsetParentY);
                     equal(offsetParentX, 0, "Test relativeParent(element) offsetParentX to match.");
                     equal(offsetParentY, 0, "Test relativeParent(element) offsetParentY to match.");
                 });
             };
         </ script >
         < style >
             .content {
                 width: 30px;
                 height: 20px;
                 background-color: salmon;
             }
         </ style >
    </ head >
    < body >
    < h1  id = "qunit-header" >Qunit Example</ h1 >
    < h2  id = "qunit-banner" ></ h2 >
    < div  id = "qunit-testrunner-toolbar" ></ div >
    < h2  id = "qunit-userAgent" ></ h2 >
    < ol  id = "qunit-tests" ></ ol >
    < div  id = "qunit-fixture" >
         < span  id = "content"  class = "content" >
         This is a test div.
         </ span >
    </ div >
    </ body >
    </ html >



  • 依赖,设置说明

    1.qunit测试框架提供了清晰的测试结果反馈界面,这里要引入:qunit.css样式文件(http://qunitjs.com/ 官方主页 )

    2.引入核心库qunit.js,提供了一组测试框架的API。

    3.之前的版本有依赖jquery,目前qunit是一个独立的JavaScript.

    4.引入要测试的JavaScript代码,本例是:JCN.dom.node.util.js

    5.<body>xx</body>:body体的内容是固定的展示qunit测试结果的模版,其中qunit-header:测试标题,qunit-testrunner-toolbar:一组选择框提供了在测试运行时一些条件设置,qunit-userAgent:(很清楚)测试客户端信息,qunint-tests:一组测试结果,qunit-fixture:(这个重要)fixture的意思是固定不变的,不大可能移动的,如果测试用例对DOM进行了相应的操作,比如移动,删除,设置属性等,在这个结点下的任意结点在每一个测试用例结束后都会回复原始状态,这就保证的测试用例的独立和封闭,不会对其他测试和原始环境造成影响。

  • 测试用例说明

    1.关于qunit提供的测试功能要查看API:http://api.qunitjs.com/ 这是个学习的好方法。

    2.如上代码:Test001分析

     test("test getStyle", function(){...}):第一个参数:测试用例的名称,第二个参数:assert(断言),注意:如果第二个参数是数组,则表示期望断言的数,那么第三个参数就是断言。在本例子中使用在断言方法中设置断言数:expect(4)。建议这样写,简明思议,不至于时间久了,第二个参数记不起来是什么意思,还得回头API。

  • 关于断言方法的使用和Junit类似,可以查看qunit源代码,有清晰可读的注释。

    下面提供个片段图,以供溯本逐源的朋友快速定位。

    wKiom1NPRcaRZ908AAEnYErGLOs766.jpg

  • Test module

         module在这里可以理解为组的意思,使用module的原因是归为一个组的测试用例它们具有共同的测试执行前或测试执行后要处理的逻辑。

  • qunit插件mockjax 和 qunit asyncTest(testName, assert)

    qunit的异步测试方法asyncTest,以start()开启,以stop()结束,然后继续一下一个测试用例,问题是其不能达到真正的异步通信,数据传输的功能,这个时候借助mockjax可以达到想要的结果。mockjax提供的测试demo中的一个例子如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    asyncTest( 'Support 1.5 $.ajax(url, settings) signature.' function () {
         $.mockjax({
             url:  '/resource' ,
             responseText:  'Hello Word'
         });
         $.ajax( '/resource' , {
             success:  function (response) {
                 equal(response,  'Hello Word' );
             },
             complete:  function () {
                 start();
             }
         });
         $.mockjaxClear();
    });

    总结一点mockjax在一个测试用例中完成了前端异步请求和后端服务器响应。


j_0008.gif插播,编辑器太难用了,老是格式对不好,光标位置跳,内容浮动。


   文中开始提供的测试代码测试结果图如下:

wKiom1NPTN3izozzAAIfPOdvPJw208.jpg

   说明一些测试结果:

   1.测试结果:“模块名”+“测试用例名”+“结果数据(失败个数,通过个数,测试个数)”

   2.测试结果图中从上往下依次是:标题,标语,客户端信息,测试结果。




本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1397009,如需转载请自行联系原作者

相关文章
|
JavaScript 前端开发 机器人
|
Web App开发 JavaScript 测试技术
QUnit系列 -- 1.介绍单元测试(上)
  大家都知道单元测试对于保证代码质量的重要性,但是对客户端代码进行单元测试则要困难的多。一个比较棘手的问题是,因为JavaScript代码和后台代码或者html结合的比较紧密,他缺少真正单元的概念。例如对dom的操作,无论我们是借助jquery这样的类库,把js代码单独放在一个文件,还是直接使用内嵌代码的实现方式,都没有可以测试的单元。
1070 0
|
Web App开发 JavaScript 前端开发
QUnit系列 -- 2.介绍单元测试(下)
  JavaScript测试框架:QUnit   下面我们将介绍使用QUnit来完成前一章中的单元测试。 DOCTYPE html> Refactored date examples test...
995 0
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
8月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1241 23
|
10月前
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
1623 24
|
JSON 前端开发 测试技术
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
948 10
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
|
10月前
|
SQL 测试技术
除了postman还有什么接口测试工具
最好还是使用国内的接口测试软件,其实国内替换postman的软件有很多,这里我推荐使用yunedit-post这款接口测试工具来代替postman,因为它除了接口测试功能外,在动态参数的支持、后置处理执行sql语句等支持方面做得比较好。而且还有接口分享功能,可以生成接口文档给团队在线浏览。
487 2
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
737 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡