零、前言

JavaScript 在大约 20 年前首次发布。 许多年来,它并没有受到广大观众的重视。 今天,它是一种成熟的(也是最流行的)编程语言。 无论以何种方式为 Web 做什么,都依赖于 JavaScript。 此外,随着 html5 相关技术的出现,开发的重点将更多地转向富 internet 应用架构。 这意味着进一步扩展基于 JavaScript 的复杂可伸缩解决方案。 服务器端 JavaScript 正迅速获得发展势头,从而实现了 JavaScript 的自动化测试。

QUnit 是一个非常容易使用的 JavaScript 测试框架,它非常强大和灵活,是任何规模项目的单元和功能测试的好选择。

这本书提供了一个逐步掌握 QUnit 的指南。 它展示了如何设置和使用 QUnit,如何使用 QUnit 自动化跨浏览器测试,以及如何与持续集成工具合作从 QUnit 中获益。

本书的目标是帮助读者在短时间内充分利用 QUnit。

这本书的内容

Setting up QUnit (Simple)讲解如何搭建测试环境,以及如何熟悉 QUnit 框架。

测试断言(简单)描述了关于 QUnit 断言方法和流行的 QUnit 断言插件的教程。

Writing a custom assertion plugin (Advanced)using QUnit callback for a custom assertion plugin**

测试异常(中等)描述 JavaScript 中的自定义异常和断言异常行为。

test asynchronous calls (Medium)异步调用测试(T0)

组织测试用例(简单)检查 QUnit 设施以保持测试逻辑组织。

使用共享设置(中等)描述了一种方法来在一组测试之间共享任务,并在测试执行之间保持测试环境整洁。

测试用户动作(中)解释通过模拟终端用户动作和断言预期行为,在一个简单的计算器应用上进行功能测试。

在控制台上运行 QUnit(高级)解释通过 PhantomJS 无头浏览器在命令行中运行 QUnit 测试。 它还解释了如何将 QUnit 测试任务分配给 Grunt 并使用 Travis CI 进行自动化测试。

跨浏览器分布式测试(高级)解释使用命令行工具 Bunyip 自动化客户端跨浏览器测试。

Building a web project (Advanced)解释了如何将 QUnit 测试任务添加到项目构建脚本中。

QUnit and CI - setting Jenkins (Advanced)解释如何设置 Jenkins 持续集成服务器来自动化 QUnit 测试

这本书是给谁的

对于那些正在寻找功能强大但易于使用的测试框架的 JavaScript 工作者来说,这本书非常有用。

读者不需要知道任何特定的框架,但至少 JavaScript 和 HTML 的基本原理。

如果读者有任何自动化测试的背景,这本书将是最有利可图的。

会议

在这本书中,你会发现许多文本的风格,以区分不同类型的信息。 下面是这些风格的一些例子,以及对它们含义的解释。

文本代码如下所示:“将构建脚本设置为build.xml,放在项目工作目录的根目录下。”

代码块的设置如下:

<?xml version="1.0"?>
<!DOCTYPE project>
<project name="tree"  basedir="." default="build">
<target name="build" description="runs QUnit tests using PhantomJS">
  <!-- Clean up output directory -->
  <delete dir="./build/qunit/"/>  
  <mkdir dir="./build/qunit/"/>  
  <!-- QUnit Javascript Unit Tests -->
  <echo message="Executing QUnit Javascript Unit Tests..."/>

</target>
</project>

当我们希望您注意代码块的特定部分时,相关的行或项以粗体显示:

utils.subscribe( global, "load", function() {
             var calc =  document.getElementById("calc"),
                 num1 = document.getElementById("num1"),
                 num2 = document.getElementById("num2"),
                 sum = document.getElementById("sum");

 QUnit.test( "Test that calc sums up typed in numbers by click", function( assert ){
 num1.value = "5";
 num2.value = "7";
 utils.trigger( calc, "click" );
 assert.strictEqual( sum.value, "12" );
 });
 });

命令行输入或输出如下所示:

phantomjs runner.js test-suite.html

新词语重要词语以粗体显示。 例如,你在屏幕上看到的单词,在菜单或对话框中,会出现这样的文本:“进入 Jenkins Dashboard 页面,点击Add new joblink”。

注释

警告或重要注释出现在这样的框中。

提示

提示和技巧是这样的。

读者反馈

我们欢迎读者的反馈。 让我们知道你对这本书的看法——你喜欢或不喜欢的东西。 读者反馈对于我们开发游戏非常重要。

要给我们发送一般的反馈,只需发送电子邮件到<[feedback@packtpub.com](mailto:feedback@packtpub.com)>,并通过你的信息的主题提到书名。

如果你对某一主题有专长,并且你对写书或投稿感兴趣,请参阅我们的作者指南www.packtpub.com/authors

客户支持

现在,您是包书的骄傲所有者,我们有一些东西来帮助您从您的购买中获得最多。

下载示例代码

您可以从您的账户http://www.packtpub.com下载您购买的所有 pack 书籍的示例代码文件。 如果您在其他地方购买了这本书,您可以访问http://www.packtpub.com/support并注册,直接将文件通过电子邮件发送给您。

勘误表

尽管我们已经尽一切努力确保内容的准确性,但错误还是会发生。 如果您在我们的任何一本书中发现了错误——也许是文本或代码中的错误——我们将非常感谢您向我们报告。 通过这样做,您可以避免其他读者感到沮丧,并帮助我们改进本书的后续版本。 如果你发现任何错误,请报告通过访问 http://www.packtpub.com/support,选择你的书,点击勘误表提交链接,并输入你的勘误表的细节。 一旦您的勘误表得到验证,您的提交将被接受,勘误表将被上传到我们的网站,或添加到任何现有勘误表的列表中,在该标题的勘误表部分。

**## 盗版

互联网上的版权材料盗版是所有媒体都存在的问题。 在 Packt,我们非常重视版权和许可的保护。 如果您在互联网上发现任何形式的我们作品的非法拷贝,请立即提供我们的位置地址或网站名称,以便我们采取补救措施。

请在<[copyright@packtpub.com](mailto:copyright@packtpub.com)>联系我们,并提供疑似盗版资料的链接。

我们感谢您在保护我们的作者方面的帮助,以及我们为您带来有价值的内容的能力。

问题

如果您对这本书的任何方面有问题,可以通过<[questions@packtpub.com](mailto:questions@packtpub.com)>联系我们,我们将尽力解决它。**