QUnit 实践一

项目准备启用Qunit, 先来尝试一下。 不说废话,上代码:

<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>QUint</title>
    <link rel="stylesheet" href="qunit.css">
    <script src="qunit.js"></script>
    <script type="text/javascript">

        myfunc = function(a){
            return a^3;
        }
        function Foo( x, y, z ) {
            this.x = x;
            this.y = y;
            this.z = z;
          }

        test("Simple", function(assert) {
            assert.ok(function(){return "world1"}, "world");
            assert.notOk(1 === "1", "=== failed!");
            ok(1 == "1", "== pass!");
            equal(‘1‘,1,"1==1 equal");
            assert.ok(myfunc(1) == 2,"calc pass"+(1^3));
        });

        var a = new Foo(1,2,3);
        var b = a;
        test("object",function(){
            propEqual(a,b,"a is same as b");
            strictEqual(a,b,"a is strict same as b");
            a.x =8;
            propEqual(a,b,"a is same as b");
            a = {x:8,y:2,z:3};
            propEqual(a,b,"a is same as b");
            notStrictEqual(a,b,"a is not strict same as b");
            a = new Foo(1,2,3);
            notPropEqual(a,b,"a is not same as b");
            b = new Foo(1,2,3);
            notEqual(a,b,"a is not same as b");
            notStrictEqual(a,b,"a is not strict same as b for different object");
            deepEqual(a,b,"a b DeepEqual");
        });

        test( "async", function( assert ) {
          assert.expect( 2 );

          var done1 = assert.async();
          var done2 = assert.async();
          setTimeout(function() {
            assert.ok( true, "test resumed from async operation 1" );
            done1();
          }, 500 );
          setTimeout(function() {
            assert.ok( true, "test resumed from async operation 2" );
            done2();
          }, 150);
        });

        QUnit.test( "expect test", function( assert ) {
          assert.expect( 1 );

          function calc( x, operation ) {
            return operation( x );
          }

          var result = calc( 2, function( x ) {
            assert.ok( true, "calc() calls operation function" );
            return x * x;
          });

          assert.equal( result, 4, "2 squared equals 4" );
        });
    </script>
</head>

<body>
    <h1 id="qunit-header">QUnit Report</h1>
    <h2 id="qunit-banner"></h2>
    <ol id="qunit-tests"></ol>
</body>
</html>

看报告:

看起来不错, 有equal, deepEqual, strictEqual要区别下。

在看看dom的操作:

<!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>demo1</title>
        <link rel="stylesheet" href="../../qunit.css">
        <script src="../../qunit.js"></script>
        <script type="text/javascript">
        function submit (argument) {
            // body...
            var Str = document.getElementById("userName").value + document.getElementById("password").value;
            document.getElementById("result").innerText = Str;
        }
        function reset (argument) {
            // body...
            document.getElementById("userName").value = document.getElementById("password").value = "";
            document.getElementById("result").innerText = "";
        }

        test("Simple", function(assert) {
            document.getElementById("userName").value = "username";
            document.getElementById("password").value = "password";
            submit();
            assert.equal(document.getElementById("result").innerText,"username" + "password","test input");
            reset();
            assert.equal(document.getElementById("password").value,document.getElementById("userName").value,"reset");
        });
        </script>
    </head>
    <body>
        <!-- <form > -->
        <div>
            <div>
                <label for="userName">UserName:</label>
                <input type="text" id="userName" name="userName">
            </div>
            <div>
                <label for="password">password:</label>
                <input type="text" id="password" name="password">
            </div>
            <div>
                <input type="button" value="submit" onclick="submit()">
            </div>
        </div>
        <!-- </form> -->
        <div id="result">

        </div>

        <div id="test">
            <h1 id="qunit-header">QUnit Report</h1>
            <h2 id="qunit-banner"></h2>
            <ol id="qunit-tests"></ol>
        </div>
    </body>
</html>

图:

运行还可以啊。

问题来了: 怎么把测试报告也页面分离,这样太丑了? 继续研究。。。

时间: 2024-07-31 21:54:08

QUnit 实践一的相关文章

使用Node.js完成的第一个项目的实践总结

http://blog.csdn.net/yanghua_kobe/article/details/17199417 项目简介 这是一个资产管理项目,主要的目的就是实现对资产的无纸化管理.通过为每个资产生成二维码,来联合移动终端完成对资产的审核等.这个项目既提供了Web端的管理界面也提供移动端(Andorid)的资产审核.派发等相关功能.我们用Node.js构建该项目的Web端以及移动端的Serveice API. 项目主框架:Express 简介 Express 是一个非常流行的Node.js

5.5 进入编辑模式 5.6 vim命令模式 5.7 vim实践

5.5 进入编辑模式 5.6 vim命令模式 5.7 vim实践 扩展 vim的特殊用法 http://www.apelearn.com/bbs/thread-9334-1-1.html vim常用快捷键总结 http://www.apelearn.com/bbs/thread-407-1-1.html vim快速删除一段字符 http://www.apelearn.com/bbs/thread-842-1-1.html vim乱码 http://www.apelearn.com/bbs/thr

分布式开放消息系统(RocketMQ)的原理与实践

分布式消息系统作为实现分布式系统可扩展.可伸缩性的关键组件,需要具有高吞吐量.高可用等特点.而谈到消息系统的设计,就回避不了两个问题: 消息的顺序问题 消息的重复问题 RocketMQ作为阿里开源的一款高性能.高吞吐量的消息中间件,它是怎样来解决这两个问题的?RocketMQ 有哪些关键特性?其实现原理是怎样的? 关键特性以及其实现原理 一.顺序消息 消息有序指的是可以按照消息的发送顺序来消费.例如:一笔订单产生了 3 条消息,分别是订单创建.订单付款.订单完成.消费时,要按照顺序依次消费才有意

php各种设计模式简单实践思考

前言 我一直觉得什么框架,版本,甚至语言对于一个coder来说真的不算什么,掌握一个特别高大上的一个框架或者是一个新的,少众的语言真的不算什么,因为你可以,我要花时间也可以,大家都是这样的.所以基本的显得额外重要,即是算法和数据结构,再就是好的设计模式了,,,听过一句话,是好的数据结构是让计算机更快的工作,而一个好的设计模式则是使开发者工作的更快! 单例模式 单例模式特点 $_instance 必须声明为静态的私有变量 构造函数和克隆函数必须声明为私有的,这是为了防止外部程序 new 类从而失去

VS2010 Extension实践(2)

在上一篇(VS2010 Extension (1)实践)里,主要展示了如何使用MEF扩展VS2010,来扩展编辑控制和展现自己的UI:在实现QuickToolbar的时候,发现MEF仅仅提供了很基本的编辑控制,如果需要高级的操作,比如注释选择的代码,就捉襟见肘,很是麻烦. 本篇我将展示如何深入挖掘VS2010 Extension,使它成为锋利的军刀,而不是绣花枕头.鉴于此,这里就从上面提到了的Feature--注释和取消注释选择的代码来剖析,希望可以为大家拓宽思路,更好的利用VS2010. 首先

displaytag的Excel导出实践

本文转自 http://lingceng.iteye.com/blog/1820081/ Displaytag官网有1.0, 1.1, 1.2等,注意找到对应的版本.源码和API可以在Maven库中找到.   常规的使用不是问题,这里说说关于Excel导出的问题,中文乱码,使用POI等.我使用的是Displaytag1.1. 基本导出功能   这种情况只需引入displaytag-1.1.jar.   设置column属性media="html"将不会导出,media="ex

【小程序】微信小程序开发实践

帐号相关流程 注册范围 企业 政府 媒体 其他组织 换句话讲就是不让个人开发者注册. :) 填写企业信息 不能使用和之前的公众号账户相同的邮箱,也就是说小程序是和微信公众号一个层级的. 填写公司机构信息,对公账户信息 绑定管理员微信 企业认证 公司对公账户对微信进行打款 账户自动验证后,自动认证通过,并将认证资金退回公司对公账户,费用在1元内随机 小程序发布流程 开发实践 这次的demo项目为农历和公历的转换器,重在体验开发流程. AppID(小程序ID) 做上面的那些步骤就是为了得到小程序ID

CMDB专家实践谈:自动化运维的基石CMDB

CMDB是什么? 运维百花齐放繁荣景象的同时,也让碎片化问题产生:每个人都想整合运维平台,但是往往事与愿违. CMDB就像一个人的大脑核心,是一个信息协调库,其存储的资料是协调身体完成各种复杂运动的信息来源. 我心中的CMDB .碎片整合 面向运维工具的碎片化场景,是盘活整个运维管理的数据核心 .元数据库 提供运维活动的基础元数据,是唯一可信的运维配置数据服务 .场景驱动 为运维联动提供数据驱动,可协调工具来完成各类自动化场景 自动扩容+自动监控 CMDB如何建设? 痛点现象与对策I模型建不好

基础入门_Python-模块和包.运维开发中watchdog事件监视的最佳实践?

简单介绍: 说明:  此模块是一个跨平台的PY库和SHELL工具,可以监视文件系统事件(增加/删除/修改) 快速安装: pip install --upgrade watchdog 日志记录: event_handler = LoggingEventHandler() -> event_handler 说明: 创建一个日志处理句柄,其实LoggingEventHandler是继承自FileSystemEventHandler类,只是重写了增删查改的回调函数,直接调用logging模块写到对应lo