《JavaScript忍者秘籍》——2.3 测试框架

2.3 测试框架

测试套件应该作为基本开发流程的一部分,所以应该选择一个非常适合自己代码风格和代码库的测试套件。一个JavaScript测试套件应该满足一个唯一需求:显示测试的结果,以便很容易地确定哪些测试通过的,哪些是失败的。测试框架可以帮助我们达到这一目标,除了创建测试并将其组织到测试套件中以外,不用再担心别的事情。

根据测试的需要,我们可以从JavaScript测试框架中找到很多功能。其中一些功能包括:

  • 能够模拟浏览器行为(单击按键等)。
  • 测试的交互式控制(暂停和恢复测试)。
  • 处理异步测试超时问题。
  • 能够过滤哪些会被执行的测试。

一项非正式的调查,试图统计人们在日常开发过程中使用哪种JavaScript测试框架,其结果非常具有启发性。图2.5描述的令人沮丧的事实是,很多人根本不测试。通常情况下,大家会很容易认为非测试人员的比例实际上是更高的。

另一个从该结果得出的观点是,绝大多数的脚本编写者,在编写测试用例时都选择如下四个工具中的一个:JsUnit、QUnit、Selenium以及YUI Test。测试工具的前十大“赢家”,如图2.6所示。

这是一个有趣的结果,其表明没有一个有绝对优势的测试框架。但更有趣的是有相对较少用户的一次性框架的数量,如图2.6所示。

应该注意的是,从头开始编写一个测试框架是很容易,如果要更好地理解一个测试框架是如何实现的,这是一个好办法。这是一个特别有趣的练习,因为在编写一个测试框架时,我们通常是要处理纯JavaScript,而无需过多担心跨浏览器的问题。除非我们想模拟浏览器事件,如果是这样(尽管我们将在第13章解决这个问题)祝你好运!

根据图2.6显示的结果,许多人得出同样的结论,并编写了大量的一次性框架以适应自己的特殊需要。虽然可以编写一个专有的单元测试框架,但很有可能我们想用的是预先构建的框架。

一般的JavaScript单元测试框架会提供一些基本组件:一个测试运行器、测试分组以及断言。还有一些测试框架提供了异步运行测试的功能。让我们简要看一些最受欢迎的单元测试框架。

2.3.1 QUnit
QUnit最初是用于测试jQuery的单元测试框架。它的发展已经超出其最初的目标,目前是一个独立的单元测试框架。QUnit主要是为单元测试提供一个简单的解决方案,提供最小但却易于使用的API。

QUnit的特点如下:

  • 简洁的API。
  • 支持异步测试。
  • 不限于jQuery或使用jQuery的代码。
  • 特别适合于回归测试。

2.3.2 YUI Test
YUI Test是Yahoo !构建并开发的测试框架,于2008年10月发布。为了配合YUI3的发布,2009年YUI Test被完全重写。YUITest提供了大量的特性和功能,以确保覆盖代码库所需要的任何单元测试用例。

YUI Test的特点如下:

  • 广泛和全面的单元测试功能。
  • 支持异步测试。
  • 良好的事件仿真。

2.3.3 JsUnit
JsUnit是流行的Java JUnit测试框架在JavaScript语言上的实现。尽管它仍然是最流行的JavaScript单元测试框架之一,但也是最古老的(无论是代码年龄还是代码质量)。该框架最近没有进行太多更新,所以要测试大家熟知的现代浏览器的代码,JsUnit可能不是最好的选择。
2.3.4 新出的单元测试框架
根据JUnit的主页信息,Pivotal Labs团队现在正专注于一个名为Jasmine的新测试工具。
接下来,我们要看一看如何创建测试套件。

时间: 2024-10-28 15:52:48

《JavaScript忍者秘籍》——2.3 测试框架的相关文章

《JavaScript忍者秘籍》——2.4 测试套件基础知识

2.4 测试套件基础知识 测试套件的主要目的是聚合代码中的所有单个测试,将其组合成为一个单位,这样它们可以批量运行,提供一个可以轻松反复运行的单一资源. 为了更好地理解测试套件的工作原理,我们有必要了解如何构建一个测试套件.或许有些出人意料,构建JavaScript测试套件确实很容易.大约只需要40行代码就可以构建好一个功能. 人们可能会问"为什么要创建一个新的测试套件?",大多数情况下,可能没有必要编写自己的JavaScript测试套件.目前已经有大量的高质量测试套件可供选择.但是,

《JavaScript忍者秘籍》——第1章 进入忍者世界 1.1即将探索的JavaScript库

第1章 进入忍者世界 本章涵盖以下内容: 介绍本书的目的和结构 将要关注的库 什么才是JavaScript高级编程 跨浏览器编程 测试套件示例 如果你正在阅读本书,应该知道,没有什么简单方法可以创建有效且跨浏览器的JavaScript 代码,除了编写整洁代码的常规挑战外,我们还要额外应对各种浏览器的差异和复杂性.为了应对这些挑战,JavaScript开发人员通常使用JavaScript库来实现通用和可重用的功能. 这些库虽然在方法.内容和复杂性方面有很大差异,但唯一不变的是:它们都需要简单易用,

《JavaScript忍者秘籍》——导读

**前言**Web应用程序将为用户提供丰富的用户界面体验,没有JavaScript,我们也就只能显示几张小图片.Web开发人员比以往任何时候都更需要熟练掌握能够为Web应用程序带来生命的语言. 像橙汁和早餐一样,JavaScript不再只用于浏览器了.该语言推倒了浏览器的界限,可用在Rhino和V8等引擎的服务器上,也可以用于像node.js这样的框架. 虽然本书主要是介绍用于Web应用程序的JavaScript,但本书第二部分提出的JavaScript基础适用范围也很广泛. 随着使用JavaS

《JavaScript忍者秘籍》——2.5 总结

2.5 总结 在这一章中,我们已经学习了一些与调试JavaScript代码相关的基本技术,以及基于这些结果构建简单的测试用例. 我们研究了在代码执行时,如何使用日志记录来观察代码的行为,我们甚至实现了一个方便的方法,可以确保在现代和传统浏览器上都能够成功记录日志,不管它们之间有多少差异. 我们探索了如何使用断点,在特定的代码行上停止代码的执行,以便能够了解代码执行时的状态. 然后学习了测试用例生成,定义并关注良好测试的特性:可重复性(repeatability).简单性(simplicity)和

《JavaScript忍者秘籍》——第2章 利用测试和调试武装 自己2.1 调试代码

第2章 利用测试和调试武装 自己 本章涵盖以下内容. JavaScript代码调试工具 测试用例生成技术 构建测试套集 如何测试异步操作 为代码构建有效的测试套件是非常重要的,所以在我们进入任何编码之前,要首先对它进行讨论.和可靠的测试策略同样重要的是要对所有代码进行测试,外部因素有可能影响代码的操作效果这点十分重要,这正是我们在跨浏览器JavaScript开发时要面对的情况. 我们不仅要处理典型问题:确保代码质量,尤其是与多位同时编写一段代码的开发人员打交道时,并避免出现会破坏API的回归错误

《JavaScript忍者秘籍》——第2章 利用测试和调试武装自己 2.1调试代码

第2章 利用测试和调试武装自己 本章涵盖以下内容. JavaScript代码调试工具 测试用例生成技术 构建测试套集 如何测试异步操作 为代码构建有效的测试套件是非常重要的,所以在我们进入任何编码之前,要首先对它进行讨论.和可靠的测试策略同样重要的是要对所有代码进行测试,外部因素有可能影响代码的操作效果这点十分重要,这正是我们在跨浏览器JavaScript开发时要面对的情况. 我们不仅要处理典型问题:确保代码质量,尤其是与多位同时编写一段代码的开发人员打交道时,并避免出现会破坏API的回归错误(

《JavaScript忍者秘籍》——1.4 当前最佳实践

1.4 当前最佳实践 掌握JavaScript语言和跨浏览器编码问题是成为Web应用程序开发专家的重要条件,但它们并不是全部.要进军专家行列,还需要秀出以下很多开发人员之前都已经掌握的高质量代码.我们将在第2章深入研究这些被称为最佳实践(best practices)的特征,除了熟练掌握语言外,还包括如下元素. 测试. 性能分析. 调试技巧. 在我们的编程过程中,时常遵守这些最佳实践是极其重要的:跨浏览器开发的复杂性也直接证明了这一点.让我们来看看这些实践. 1.4.1 当前最佳实践:测试在本书

《JavaScript忍者秘籍》——1.3 跨浏览器注意事项

1.3 跨浏览器注意事项 完善JavaScript编程技能将引导我们不断前行,尤其是目前,除了浏览器端以外,JavaScript还能够使用Rhino.V8或Node.js库等JavaScript引擎在服务器端运行.但开发基于浏览器的JavaScript应用程序(这也是本书的重点)时,越早越好的是,我们首先要应对:浏览器及其令人恼火的问题和矛盾. 理想世界中,所有的浏览器中都没有bug,并且支持以一致的方式支持Web标准,但是我们都知道我们并不生活在这种世界里. 近来浏览器的质量已经有了大大改善,

《JavaScript忍者秘籍》——2.2 测试用例生成

2.2 测试用例生成 Robert Frost曾写道:篱笆筑得牢,邻居处得好,Web应用程序也是如此,不管是何种编程准则,好的测试铸就好的代码.注意对这个"好"字的强调.如果测试用例的构建很差,它很有可能只是大量的测试套件,不会真正帮助我们提高代码质量. 优秀的测试用例具有三个重要特征. 可重用性(repeatability)--测试结果应该是高度可再生的.多次运行测试应该产生相同的结果.如果测试结果是不确定的,那我们又如何知道哪些结果是有效的,哪些又是无效的呢?此外,可重现性可以确保