💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
#### 内容简介 本书是一本完整的、基于最佳实践的JavaScript敏捷测试指南,同时又有着测试驱动开发方法(TDD)所带来的质量保证。领先一步的JavaScript敏捷开发者Christian Johansen的讨论涵盖了将最先进的自动化测试用于JavaScript开发环境的方方面面,带领读者走查整个开发的生命周期,从项目启动到应用程序部署。本书的主要内容包括:掌握自动化测试和TDD;构建有效的自动化测试工作流;测试浏览器和服务器两端的代码(使用Node.js)、运用TDD构建更加干净的API、更加模块化的代码以及更健壮的软件;编写可测试的代码;使用测试桩和模拟对象,将各个单元单独进行测试;通过重构持续进改代码;走查全功能软件的创建和自动化测试。 #### 前言 作者对于本书的观点 近年来,JavaScript已经发展壮大。“DHTML”的峥嵘岁月已经一去不复返,我们现在身处的是“Ajax”、甚至是“HTML5”的时代。在过去的几年里,JavaScript产生了一些杀手级应用;它也研发出了一些健壮的库,以帮助开发者书写跨浏览器脚本;它还有了一组工具,例如调试器、分析器,以及单元测试框架。整个社区不知疲倦地工作,将他们所知晓和喜欢的用于其他语言的工具带入JavaScript,以为它准备一个“真实”的开发环境,在此环境中人们可以借鉴从其他环境中获取的工作流和知识经验,集中精力构建高质量的应用程序。 不过,JavaScript社区总体来说还不够侧重于自动化测试,测试驱动开发在JavaScript开发工程师中还比较罕见—即使他们已经工作在这么一种可能目标平台最为宽泛的语言之上。在很长的一段时间里,这种现象可能是缺乏工具支持的结果,但是新的单元测试框架可谓层出不穷,它们为测试代码提供了无穷无尽的方法,并且让您感觉顺手。即使如此,大多数的Web应用程序的开发人员仍然在测试其JavaScript代码方面缩手缩脚。我难得遇到一位Web开发人员能够具有某种程度的信心将他的应用程序的核心功能提取出来并加以重新安排,而这正是强力的测试套件赋予开发人员的能力。这种信息会减少开发人员对应用程序出错的担心,从而能够更加放心地集中精力于实现新的功能。 本书将展示,JavaScript中的单元测试和测试驱动开发已经有了长足的进步。它将帮助您写出更漂亮的代码,并成为更具生产力的开发工程师。 ##### 本书内容 本书主要讲述实践中的JavaScript开发,采用了测试驱动开发所提倡的技术和工作流。它也讲述了如何通过测试覆盖率数据来增加您对代码的信心,并获得无所顾忌的重构和系统地开发代码库的能力。它还讲述了如何编写模块化的、可测试的代码,以及如何编写在各式各样的环境中运作,并且不会给您的用户带来麻烦的JavaScript。 本书的内容组织分为4个部分。 ##### 第一部分:测试驱动开发 第一部分将介绍自动化测试和测试驱动开发中的概念。我们将从审视单元测试是什么、它做了什么、有什么好处来入手。然后,我们将围绕它们建立起自己的工作流,与此同时介绍测试驱动的开发流程。我将给您演示若干可用的JavaScript单元测试框架,讨论它们的优点和缺点,最后更加仔细地研究那个我们将在全书范围内使用的框架。 ##### 第二部分:开发人员的JavaScript 第二部分将更深入地研究JavaScript程序设计。这部分并非完整地介绍JavaScript语言。您应该已经有一些JavaScript的经验(可能是用过诸如jQuery、Prototype这样的库)或者有一些其他编程语言的经验。如果您是一名之前没有JavaScript经验的程序员,本部分有助于您理解JavaScript在哪些方面与其他语言不同,尤其是与其他在动态性方面略逊一筹的语言有何不同,并且给您打好必需的基础,以使您能看懂在第三部分那些实践中的例子。 如果您早已对闭包、原型继承及其动态本质,以及特性检测等高级JavaScript概念了如指掌,那么您可能仅仅想翻翻本部分的内容作为提醒,或者直接跳至第三部分。 在讲述JavaScript的细节时,我将采用单元测试的手段来说明这门语言,并借此机会让测试来驱动我们实现一些辅助函数,以备我们在第三部分中使用。 ##### 第三部分:JavaScript测试驱动开发实践 这一部分将完成一系列处于不同环境中的小型项目。我们将学会如何开发一套小型的通用JavaScript API,如何开发一个依赖于DOM的小工具(Widget),如何将浏览器的差异抽象化,如何实现一个服务器端的JavaScript应用程序等—统统采用测试驱动开发。这部分着重讲述测试驱动开发可以怎样有助于构建更干净的API、更模块化的代码,以及更健壮的软件。 每一个项目都通过实现一段完整的功能、但有限的代码引入了一些新的与测试相关的概念,并说明它们在实践中的运用。在该部分中,除了其他事项外,我们还将学习如何测试依赖于浏览器API、定时器、事件处理器、DOM操作和异步服务器请求(即“Ajax”)的代码。我们也将考察实践中采用的技术,如存根、重构,以及运用设计模式来优雅地解决问题。 这一部分的各章将会提供如何扩展已开发功能的思路,并赋予您实践的能力,以自己动手完成代码的改进。扩充版本的解决方案都可以从本书的网站上下载。 我在这些项目中花费了大量的心血以保证编写出可运行的代码,并完成相应的工作。这个部分的5章所得出的最终结果是一套功能齐全的即时通信客户端和服务器,未使用测试驱动开发之外的任何技术,未使用JavaScript之外的任何语言。 ##### 第四部分:测试模式 本书最后一部分以更宽泛的视角回顾了在整个第三部分所采用的一些技术。对测试替身,如模和桩,将进行更细致的考察,伴随着讲述多种形式的测试验证技术。最后,我们将回过头来重新审视一些指导原则,从而帮助您编写良好的单元测试。 ##### 本书所采用的约定 JavaScript是Brendan Eich在1995年为网景公司(Netscape)设计的语言名称。自那时以来,已经涌现出了多种替代性的实现,并且该语言已经由ECMA国际标准化为ECMA-262,又称ECMAScript。尽管这些替代性的实现也各有名字,比如微软的JScript,但它们一般都统称为“JavaScript”,而我也正是在这样的意义上使用JavaScript这个名字的。 全书范围内,我们使用等宽字体来表示对象、函数以及小型代码段。 ##### 本书读者对象 本书面向的是程序设计人员,尤其是那些编写或有兴趣编写JavaScript代码的软件开发人员。无论您是一位Ruby开发人员,主要关注Ruby on Rails;或者是一名Java或.NET开发人员,忙于构建Web应用;又或者是一名前端Web开发人员,以JavaScript、CSS和HTML为首要工具;甚至是一名后端开发人员,对JavaScript知之甚少,我都希望本书将对您有用。 本书旨在供那些需要更坚实地掌握或更精细地了解JavaScript语言的Web应用程序开发人员使用,也可供他们更好地理解如何提高他们的生产力和信心,并编写出更具可维护性的、带有更少缺陷的应用程序。 ##### 阅读本书所要求的技能 本书不要求读者以前有任何单元测试或测试驱动开发的知识。在整本书中都有自动化测试演示,通过阅读本书可以让您很好地掌握如何成功地运用它们。 同样,读者并不需要是JavaScript专家,或中等用户。我希望本书对于那些只懂JavaScript皮毛的开发者,以及JavaScript高手能够同等地有用。然而,您必须多少懂一些程序设计,这就是说,为了充分地享受本书,您应该有某种语言的程序设计经验,并且熟悉Web应用程序的开发。本书并不是讲述任何程序设计基础的入门材料,连Web应用程序相关主题的程序设计基础也没有提及。 本书的第二部分重点在JavaScript语言,但仅仅着眼于使JavaScript卓尔不群的那些特质,这些内容并不适于当做是对该语言的完整介绍。我们期望您能够通过例子中的用法,掌握这个部分中未专门讲述的语法和概念。 特别要指出的是,第二部分侧重于JavaScript函数和闭包、JavaScript对象模型,包括原型继承,以及支持代码复用的模式。此外,我们还将讨论相关的程序设计实践,比如不唐突的JavaScript,以及特性检测,这两个主题是Web开发人员都要掌握的。 ##### 关于本书的网站 本书附有一个网站,`http://tddjs.com`。访问这个地址,您可以找到书中所有的代码清单,既提供ZIP压缩文件下载,也提供完整的Git资源库,后者可以让您浏览代码的修订历史,以了解代码是如何演变的。Git资源库对于第三部分的样例项目尤其有用,因为那里涉及大量的重构。通过浏览Git资源库的修订历史,可以让您看到每一步的变化,甚至包括他们何时会改动现有代码。 您还可以通过`http://cjohansen.no`访问我的个人网站,您会在那里发现更多的讨论文章和联系信息等。如果对本书有任何意见,我十分乐意听取你们的反馈。