zoukankan      html  css  js  c++  java
  • 大叔手记(5):使用QUnit结合MVC3来做JavaScript单元测试

    关于QUnit

    几乎所有的网站都在使用JavaScript,而所有的Javascript开发人员也都想做单元测试,但是一直都为付诸行动,大叔告诫大家,该做了,不然要被别人鄙视了,因为现在是个上网的人都应该用到了JavaScript,而且HTML5来临以后,越来越多的JavaScript代码要去开发。

    本文所用到的QUnit是由jQuery team开发的,原本是用于jQuery框架的测试,后来独立发展出来,可以测试任意JavaScript代码,而且提供了非常简单的API让你非常简单的来创建你的Test Case。

    先上个简单的代码:

    // calculator.js
    var Calculator = function(){};

    Calculator.prototype.add = function(x,y){
    return x + y;
    }

    // calculator_test.js
    module("calculator测试用例");
    test("第一组测试用例", function(){
    var calc = new Calculator();
    ok(calc, "实例化创建用例通过")
    equals(calc.add(2,2), 4, "如果不等于4,宇宙规则将被打破了。");
    });

    module是声明测试用例的模块名称,每一个test提供一个名称和function callback,然后你在里面可以声明多个断言。例子里我们使用了2个最常用的断言函数ok(value, [successMessage])equals(actual, expected, [successMessage]), QUnit还提供了很多,比如:notEqual, deepEqual, notDeepEqual, strictEqual, notStrictEqual, 和raises

    按照QUnit的文档,我们最终的代码应该是这种格式:

    <!DOCTYPE html>
    <html>
    <head>
    <title>calculator.js测试</title>
    <link rel="stylesheet" type="text/css" href="/Content/qunit.css" />
    <script type="text/javascript" src="/Scripts/jquery-1.5.1.min.js"></script>
    <script type="text/javascript" src="/Scripts/qunit.js"></script>

    <script type="text/javascript" src="/scripts/calculator.js"></script>
    <script type="text/javascript" src="/scripts/calculator_test.js"></script>

    </head>
    <body>
    <h2>calculator.js测试</h2>
    <h1 id="qunit-header">QUnit example</h1>
    <h2 id="qunit-banner"></h2>
    <h2 id="qunit-userAgent"></h2>
    <ol id="qunit-tests"></ol>
    <a href="/">Back to Tests</a>
    </body>
    </html>

    MVC风格实现

    让我们来看看结合MVC如何来做,首先声明一个TestController:

        public class TestsController : Controller
    {
    public ActionResult Index()
    {
    return View();
    }

    public ActionResult Calculator()
    {
    return View();
    }
    }

    然后创建首页使用的index view,在这个view里我们不使用_layout文件,主要是用来显示每个测试用例组的连接:

        <ul>
    @{
    var controller = ViewContext.Controller.GetType();
    var methods = controller.GetMethods()
    .Where(m => m.ReturnType.ToString() == "System.Web.Mvc.ActionResult");

    foreach (var method in methods)
    {
    <li>@Html.ActionLink(@method.Name, @method.Name, "Tests")</li>
    }
    }
    </ul>

    这样,我们可以访问该Controller下所有的测试用例(我们用每个action代表一个类型的测试),

    接着在在Tests目录下,创建_ViewStart视图文件用来设置Layout,Views/Tests/_ViewStart.cshtml:

    @{
    Layout = "_TestsLayout.cshtml";
    }

    Views/Tests/_TestsLayout.cshtml的代码如下:

    <!DOCTYPE html>
    <html>
    <head>
    <title>@ViewBag.Title</title>
    <link rel="stylesheet" type="text/css" href="@(Url.Content("~/Content/qunit.css"))" />
    <script type="text/javascript" src="@(Url.Content("~/Scripts/jquery-1.5.1.min.js"))"></script>
    <script type="text/javascript" src="@(Url.Content("~/Scripts/qunit.js"))"></script>
    @RenderSection("Javascript", false)
    </head>
    <body>
    <h2>@ViewBag.Title</h2>
    <h1 id="qunit-header">QUnit example</h1>
    <h2 id="qunit-banner"></h2>
    <h2 id="qunit-userAgent"></h2>
    <ol id="qunit-tests"></ol>
    @Html.ActionLink("Back to Tests", "Index", "Tests")
    </body>
    </html>

    然后每一个view,也就是每一个测试用例组所对应的action使用的view代码都是和如下类似,不同的只是要测试的js不同:

    @{
    ViewBag.Title = "calculator.js测试";
    }
    @section Javascript{
    <script type="text/javascript" src="@(Url.Content("~/scripts/calculator.js"))"></script>
    <script type="text/javascript" src="@(Url.Content("~/scripts/calculator_test.js"))"></script>
    }


    然后编译运行,你将得到如下结果:


    然后你就可以狂加 test case了,你只需要follow下面的步骤即可:

    1. 创建JS和需要测试的JS_Tests文件
    2. 添加对应的Action方法到TestsController
    3. 为新添加的Action添加对应的View
    4. 在View的Javascriptd块里添加JS的引用

    另外,关于Ajax的mock数据,你可以访问:http://github.com/appendto/jquery-mockjax

    原文来自jonathancreamer博客,做了一些改善。

    同步

    本文已同步至目录索引:《大叔手记全集》

    结束语

    大叔手记:旨在记录日常工作中的各种小技巧与资料(包括但不限于技术),如对你有用,请推荐一把,给大叔写作的动力

  • 相关阅读:
    win10系统安装oracle11g时遇到INS-13001环境不满足最低要求
    C#文件重命名的代码
    自学MVC开发基础
    我的面试感悟-----3年工作经验的女程序员的感慨
    问心无愧,莫问前程
    Install your Application into RaspberryPi2 and automatically start up
    基于Vmware player的Windows 10 IoT core + RaspberryPi2安装部署
    MVC开发-后台开发总结
    页面长按禁止弹出选择菜单
    js检测链接(URL)是否有效
  • 原文地址:https://www.cnblogs.com/TomXu/p/2285238.html
Copyright © 2011-2022 走看看