基本信息
- 原书名:Test-Driven JavaScript Development
- 原出版社: Addison-Wesley

【插图】

编辑推荐
<a href="http://static.youku.com/qplayer.swf?playMode=mp4&winType=index&VideoIDS=XMzA3MzgwOTQ4" target="_blank">《测试驱动的JavaScript开发入门》讲座视频01</a>
<a href="http://static.youku.com/qplayer.swf?playMode=mp4&winType=index&VideoIDS=XMzA3NDIyMDk2" target="_blank">《测试驱动的JavaScript开发入门》讲座视频02</a>
<a href="http://static.youku.com/qplayer.swf?playMode=mp4&winType=index&VideoIDS=XMzA3NDE4NzA0" target="_blank">《测试驱动的JavaScript开发入门》讲座视频03</a>
<a href="http://images.china-pub.com/ebook195001-200000/199036/PPT资料.pptx">PPT资料-《测试驱动的avaScript开发入门》-by高博(请点击右键“链接另存为”下载)</a>
内容简介
计算机书籍
《测试驱动的JavaScript开发》是一本完整的、基于最佳实践的JavaScript测试指南,同时又有着测试驱动开发方法所带来的质量保证。本书涵盖了将最先进的自动化测试用于JavaScript开发环境的方方面面,带领读者走查整个开发的生命周期,从项目启动到应用程序部署。
《测试驱动的JavaScript开发》面向的是JavaScript开发人员。无论您是一位Ruby开发人员,主要关注Ruby on Rails;或者是一名Java或.NET开发人员,忙于构建Web应用;又或者是一名前端Web开发人员,以JavaScript、CSS和HTML为首要工具;甚至是一名后端开发人员,对JavaScript知之甚少,本书将将对您非常有用。
作译者
作为一名顾问,Christian在挪威曾与许多高端的公司合作,包括金融和电信行业的领头公司,他在那里开发从小到大的Web应用程序,内容涉及从普通的CMSbacked电子商务企业网站到自助服务的应用程序。
最近几年,Christian一直是一名活跃的博客写手。出于和无偿给予了他如此巨大收获的社区相同的分享和贡献的愿望,Christian参与了相当数量的开源项目并为它们做了不少贡献。
参与了多个JavaScript代码数量少到可以忽略不计的项目之后,Christian感受到了“牛仔风格”的开发之痛。为了提高代码质量、开发者的信心,以及修改和维护代码的能力,并大大地简化这个过程,他在过去的几年中花费了大量的工作和业余时间来研究JavaScript中的单元测试和测试驱动开发。作为一个铁杆的TDD支持者,同时又使用传统的服务器端的开发语言,那么牛仔风格的JavaScript开发手段自然也就呼之欲出了。这种激情的集大成之作,就是你现在你手中的这本书。
目录
译者序
前言
致谢
关于作者
第一部分 测试驱动开发
第1章 自动化测试 1
1.1 单元测试 1
1.1.1 单元测试框架 2
1.1.2 JavaScript日期函数strftime 2
1.2 断言 5
1.3 测试函数、用例和套件 7
1.4 集成测试 10
1.5 单元测试的好处 12
1.5.1 回归测试 12
1.5.2 重构 12
1.5.3 跨浏览器的测试 13
1.5.4 其他的一些好处 13
1.6 单元测试中的陷阱 13
1.7 小结 13
译者序
如何面对未知的设备和浏览器来编写行为符合预期的JavaScript代码?
如何重构已有的JavaScript代码,以适应新的运行环境?
有哪些JavaScript特性是可以依靠的,即使Web标准可能发生一些变化?
怎样在Web产品发布之前,就能够模拟大量用户使用的场景,找出可能存在的问题?
有哪些新的JavaScript技术能够大大地改进前端和后端的通信效率?
从解答以上这些、甚至更多问题的视角来看,本书的出版可谓适逢其时。Christian在书中将JavaScript语言做了庖丁解牛式的剖析,相信即使是资深的JavaScript开发者,也一定可以找到大量闻所未闻的新内容。尤其是对闭包应用和原型继承的条分缕析,可以说是每一个想在JavaScript语言方面有所作为的开发者都必须掌握的,而这方面的资料在别处却难得一见。Christian还系统地介绍了最近才出现,但已经炙手可热的node.js服务器端JavaScript框架(你没有看错,的确是服务器端的JavaScript框架),不仅做了概念性的一般论述,更重要的是通过一个完整的项目来实地演示它的每一部分是怎样工作的。在阅读本书时,我们最深切的体会就是,Christian不喜欢说“凑字数”的话,而“那么,我们就来使用下面的代码来说明问题吧”这样的话在书中可谓俯拾皆是。所以,本书的的确确是心血之作,它绝对不是代码的堆砌,而是每一段代码精确地用来说明一个主题,而没有任何多余行。作者还煞费苦心地向读者提供了可以浏览所有代码变更的Git库,这样就更比书中的静态印刷形态能够说明重构的步骤。
当然,本书最大的也是最核心的价值,还在于它完整地展示了将测试驱动的开发方法学应用于JavaScript开发中去,这是一种全新的尝试。对于尚不熟悉这种软件开发方法的读者来说,通过阅读本书可以达到一举两得的功效。并且,本书的亮点在于不仅展示了测试可以驱动编写新的代码,而且可以驱动旧代码的重构,这将测试驱动的适用范围大大地扩展了。事实上,测试驱动的本质是通过用例验证来保证产品代码的正确性。通过认真地阅读本书,读者可以非常详尽地了解到,如何在Web开发的过程中构建这样的用例,以编写从单个函数,到功能模块,再到完整产品的正确代码。这些宝贵经验的分享,对于Web开发者的实际工作有着直接帮助的同时,也十分有益于良好的开发习惯的培养。
JavaScript正在日益变得更像一门C/C++那样的通用语言,它的设计中所蕴含的威力,直到最近才逐渐为人所知。特别是像jQuery这样的库出现以后,浏览器之间的差异几乎不复存在,而更多的精力则被放在用JavaScript来实现过去需要在服务器上编写大量的后端代码才能完成的工作。有一种说法,我个人认为很有道理,就是“JavaScript就是Web时代的汇编”。它正在以前所未有的速度取代服务器端用于页面生成的计算,而将大部分的计算量集中在业务逻辑和数据访问这些真正需要计算之处。掌握JavaScript语言,已经日渐成为所有Web开发的从业人员所必备的基本技能要求,那种“JavaScript仅仅是前端人员要学的东西,和后端人员无关”的想法,已经越来越落伍了。从现在就开始让自己多掌握一些JavaScript,无论之前是初学还是已经精通,本书都能够满足您的需求。
在本书翻译的过程中,芝加哥大学博士、成都电子科技大学云计算研究中心负责人赵勇同志、盛大创新院的程德同志、EMC中国软件开发工程师朱磊同志,以及自由软件开发者凌杰同志,都付出了巨大的心血。机械工业出版社华章公司的陈冀康编辑给了我们莫大的精神支持,使得本书的翻译和统稿工作得以顺利完成。在这里我需要特别感谢盛大创新院的郭忠祥院长为我们安排了多场以HTML5为主题的专题会议,使我们能有机会和知名的Web开发者领袖Jeremy Keith先生、W3C的HTML5工作小组组长Michael Smith先生,以及北京航空航天大学驻W3C顾问委员会代表李安琪女士等当面交流,也十分感谢盛大创新院前端团队的陈柏宇和周裕波同志,他们为我们解答了不少有关JavaScript的技术问题。本书成书之前,专注于node.js的cnodejs.org社区核心成员朱彤先生,以及上海交通大学软件学院的张尧弼教授都阅读了全稿,并给了我许多可贵的修正意见,在此一并致谢。当然,由于完成统稿工作的是我本人,所以全书的质量问题理应由我负责。我也想借此机会向在工作和生活上给了我莫大支持的父母和家人表达我内心最深处的敬意和谢意,希望本书的出版能给你们带来快乐。
高博
高级研究员
2011年12月
于上海盛大集团总部
前言
近年来,JavaScript已经发展壮大。“DHTML”的峥嵘岁月已经一去不复返,我们现在身处的是“Ajax”、甚至是“HTML5”的时代。在过去的几年里,JavaScript产生了一些杀手级应用;它也研发出了一些健壮的库,以帮助开发者书写跨浏览器脚本;它还有了一组工具,例如调试器、分析器,以及单元测试框架。整个社区不知疲倦地工作,将他们所知晓和喜欢的用于其他语言的工具带入JavaScript,以为它准备一个“真实”的开发环境,在此环境中人们可以借鉴从其他环境中获取的工作流和知识经验,集中精力构建高质量的应用程序。
不过,JavaScript社区总体来说还不够侧重于自动化测试,测试驱动开发在JavaScript开发工程师中还比较罕见—即使他们已经工作在这么一种可能目标平台最为宽泛的语言之上。在很长的一段时间里,这种现象可能是缺乏工具支持的结果,但是新的单元测试框架可谓层出不穷,它们为测试代码提供了无穷无尽的方法,并且让您感觉顺手。即使如此,大多数的Web应用程序的开发人员仍然在测试其JavaScript代码方面缩手缩脚。我难得遇到一位Web开发人员能够具有某种程度的信心将他的应用程序的核心功能提取出来并加以重新安排,而这正是强力的测试套件赋予开发人员的能力。这种信息会减少开发人员对应用程序出错的担心,从而能够更加放心地集中精力于实现新的功能。
本书将展示,JavaScript中的单元测试和测试驱动开发已经有了长足的进步。它将帮助您写出更漂亮的代码,并成为更具生产力的开发工程师。
本书内容
本书主要讲述实践中的JavaScript开发,采用了测试驱动开发所提倡的技术和工作流。它也讲述了如何通过测试覆盖率数据来增加您对代码的信心,并获得无所顾忌的重构和系统地开发代码库的能力。它还讲述了如何编写模块化的、可测试的代码,以及如何编写在各式各样的环境中运作,并且不会给您的用户带来麻烦的JavaScript。
本书的内容组织
本书分为4个部分。您可以用自己习惯的任何顺序来阅读。第二部分介绍了一些在全书范围内使用的工具,但是它们的用法您应该已经足够清楚,所以,如果您已经对JavaScript开发中诸如“不唐突的JavaScript”以及“特性检测”这样的主题有着坚实的理解的话,那么您就完全可以先将这部分略过。
第一部分:测试驱动开发
第一部分将介绍自动化测试和测试驱动开发中的概念。我们将从审视单元测试是什么、它做了什么、有什么好处来入手。然后,我们将围绕它们建立起自己的工作流,与此同时介绍测试驱动的开发流程。我将给您演示若干可用的JavaScript单元测试框架,讨论它们的优点和缺点,最后更加仔细地研究那个我们将在全书范围内使用的框架。
第二部分:开发人员的JavaScript
第二部分将更深入地研究JavaScript程序设计。这部分并非完整地介绍JavaScript语言。您应该已经有一些JavaScript的经验(可能是用过诸如jQuery、Prototype这样的库)或者有一些其他编程语言的经验。如果您是一名之前没有JavaScript经验的程序员,本部分有助于您理解JavaScript在哪些方面与其他语言不同,尤其是与其他在动态性方面略逊一筹的语言有何不同,并且给您打好必需的基础,以使您能看懂在第三部分那些实践中的例子。
如果您早已对闭包、原型继承及其动态本质,以及特性检测等高级JavaScript概念了如指掌,那么您可能仅仅想翻翻本部分的内容作为提醒,或者直接跳至第三部分。
在讲述JavaScript的细节时,我将采用单元测试的手段来说明这门语言,并借此机会让测试来驱动我们实现一些辅助函数,以备我们在第三部分中使用。
第三部分:JavaScript测试驱动开发实践
这一部分将完成一系列处于不同环境中的小型项目。我们将学会如何开发一套小型的通用JavaScript API,如何开发一个依赖于DOM的小工具(Widget),如何将浏览器的差异抽象化,如何实现一个服务器端的JavaScript应用程序等—统统采用测试驱动开发。这部分着重讲述测试驱动开发可以怎样有助于构建更干净的API、更模块化的代码,以及更健壮的软件。
每一个项目都通过实现一段完整的功能、但有限的代码引入了一些新的与测试相关的概念,并说明它们在实践中的运用。在该部分中,除了其他事项外,我们还将学习如何测试依赖于浏览器API、定时器、事件处理器、DOM操作和异步服务器请求(即“Ajax”)的代码。我们也将考察实践中采用的技术,如存根、重构,以及运用设计模式来优雅地解决问题。
这一部分的各章将会提供如何扩展已开发功能的思路,并赋予您实践的能力,以自己动手完成代码的改进。扩充版本的解决方案都可以从本书的网站上下载。
我在这些项目中花费了大量的心血以保证编写出可运行的代码,并完成相应的工作。这个部分的5章所得出的最终结果是一套功能齐全的即时通信客户端和服务器,未使用测试驱动开发之外的任何技术,未使用JavaScript之外的任何语言。
第四部分:测试模式
媒体评论
——Andrea Giammarchi,开发部主管,诺基亚 Gate 5 GmbH
“一本伟大的书,它的伟大之处在于将理论与实际例子相结合,它既适合于JavaScript/TDD新手,也适合于那些久经沙场却还想向他们的技能库中添砖加瓦的JavaScript高手。”
——Jacob Seidelin,自由Web开发人员,Nihilogic