使用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还提供了很多,比如:notEqualdeepEqualnotDeepEqual,strictEqualnotStrictEqual,
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的引用

版权声明:本文为博主http://www.zuiniusn.com 原创文章,未经博主允许不得转载。

时间: 2024-08-24 22:34:34

使用QUnit结合MVC3来做JavaScript单元测试的相关文章

[转]javascript单元测试

1.      什么是单元测试 在计算机编程中,单元测试(又称为模块测试)是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作.程序单元是应用的最小可测试部件.在过程化编程中,一个单元就是单个程序.函数.过程等:对于面向对象编程,最小单元就是方法,包括基类(超类).抽象类.或者派生类(子类)中的方法. 每个理想的测试案例独立于其它案例:为测试时隔离模块,经常使用stubs.mock 或fake等测试马甲程序.单元测试通常由软件开发人员编写,用于确保他们所写的代码符合软件需求和遵循开发目

构建自动化、跨浏览器的 JavaScript 单元测试

我们都知道在多个浏览器中测试我们的代码是多么的重要.至少在我们发布第一个项目的时候,我认为我们在网络开发社区做大部分工作还是相当不错的. 我们做的不够好的工作是测试代码时每一次做出的改变. 我个人对此感到很惭愧.我已经把"学习如何构建自动化.跨浏览器的JavaScript的单元测试"列在我的年度to-do清单中,但我每一次坐下来真正想要做的时候,我又退却了.虽然我肯定这一部分原因是因为我的懒惰,同时我认为这也是由于缺乏良好的可用信息在这个主题上. 有许多工具和框架(例如 Karma)宣

javascript单元测试工具

单元测试关注的是验证一个模块或一段代码的执行效果是否和设计或预期一样.有些开发人员认为,编写测试用例浪费时间而宁愿去编写新的模块.然而,在处理大型应用程序时,单元测试实际上会节省时间:它能帮助您跟踪问题并安全地更新代码. 常用缩略语 DOM:文档对象模型 HTML:超文本标记语言 JSTD:JSTestDriver YUI:Yahoo! User Interface 在 过去,只对服务器端语言进行单元测试.但前端组件越来越复杂,使得编写 JavaScript 代码测试用例的需求日益提高.如果您不

JavaScript单元测试框架-Jasmine

转载自金石开的blog:http://www.cnblogs.com/zhcncn/p/4330112.html Jasmine的开发团队来自PivotalLabs,他们一开始开发的JavaScript测试框架是JsUnit,来源于著名的JAVA测试框架JUnit.JsUnit是xUnit的JavaScript实现.但是JsUnit在2009年后就已经停止维护了,他们推出了一个新的BDD框架Jasmine.Jasmine不依赖于任何框架,所以适用于所有的Javascript代码. 所谓BDD(行

三分钟学会 JavaScript 单元测试

此篇文章使用 js-test-driver , 希望给无任何JavaScript 单元测试经验的开发者, 能在最短的时间内, 开展单元测试的工作? 附件: 三分钟学会 JavaScript 单元测试

JavaScript单元测试框架JsUnit基本介绍和使用

JavaScript单元测试框架JsUnit基本介绍和使用 XUnit framework XUnit是一套标准化的独立于语言的概念和结构集合,用于编写和运行单元测试(Unit tests). 每一个语言都有一个用于单元测试的XUnit框架,比如Java有JUnit, C++有CppUnit, PHP有PHPUnit, Oracle SQL有UTPL/SQL. JsUnit JsUnit的官网: http://jsunit.net/ JsUnit遵循XUnit的一些惯例: 单元测试在JsUnit

Odoo中的Javascript单元测试

前端页面利用QUnit进行单元测试,本文参考官方文档:https://www.odoo.com/documentation/8.0/reference/javascript.html 访问/web/tests页面可以看到当前所有包含测试模块的单元测试列表. 自定义单元测试方法如下: 1. __openerp__文件中添加对js文件的引用: (非官方文档中将js文件写到'test'中,而是引用view文件,在view文件中添加对js的引用,8.0以后有效) <template id="ass

用Chrome开发者工具做JavaScript性能分析

英文原文:Zack Grossbart,编译:伯乐在线——王筱 你的网站正常运转.现在我们来让它运转的更快.网站的性能由页面载入速度和代码执行效率决定.一些服务可以让你的网站载入更快,比如压缩JS和CDN,但是让代码执行的更快你要做的事情. 代码中很小的改动都可能对性能造成巨大的影响.快速灵活的网站和可怕的“无响应脚本”对话框可能只有几行代码的差别.这篇文章告诉你如何通过用Chrome开发者工具(Chrome Developer Tools)找到这几行关键的代码. 设置一个基线 我们来看一个简单

javascript--QUnit【javascript单元测试框架】

QUnit官网 开源中国:http://www.oschina.net/p/qunit 参考:http://www.zhangxinxu.com/wordpress/2013/04/qunit-javascript-unit-test-单元测试/ http://blog.csdn.net/cyq1984/article/details/6398596 一.断言(Assert) async() Instruct QUnit to wait for an asynchronous operation