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代码单独放在一个文件,还是直接使用内嵌代码的实现方式,都没有可以测试的单元。
992 0
|
Web App开发 JavaScript 前端开发
QUnit系列 -- 2.介绍单元测试(下)
  JavaScript测试框架:QUnit   下面我们将介绍使用QUnit来完成前一章中的单元测试。 DOCTYPE html> Refactored date examples test...
901 0
|
6天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
34 3
|
1月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
57 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
2月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
237 7
Jmeter实现WebSocket协议的接口测试方法
|
2月前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
247 3
快速上手|HTTP 接口功能自动化测试
|
1月前
|
JavaScript 前端开发 API
vue尚品汇商城项目-day02【9.Home组件拆分+10.postman测试接口】
vue尚品汇商城项目-day02【9.Home组件拆分+10.postman测试接口】
40 0
|
2月前
|
JavaScript 前端开发 测试技术
ChatGPT与接口测试
ChatGPT与接口测试,测试通过
48 5

热门文章

最新文章