测试驱动的JavaScript开发

测试驱动的JavaScript开发
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者: [美] ,
2012-02
版次: 1
ISBN: 9787111362746
定价: 69.00
装帧: 平装
开本: 16开
纸张: 胶版纸
页数: 396页
原版书名: Test-driven JavaScript Development
21人买过
  •   《测试驱动的JavaScript开发》是一本完整的、基于最佳实践的JavaScript测试指南,同时又有着测试驱动开发方法所带来的质量保证。本书涵盖了将最先进的自动化测试用于JavaScript开发环境的方方面面,带领读者走过整个开发的生命周期,从项目启动到应用程序部署。

      本书面向的是JavaScript开发人员。无论您是一位Ruby开发人员,主要关注Ruby on Rails;或者是一名Java或.NET开发人员,忙于构建Web应用;又或者是一名前端Web开发人员,以JavaScript、CSS和HTML为首要工具;甚至是一名后端开发人员,对JavaScript知之甚少,本书将对您非常有用。   Christian Johansen居住在挪威奥斯陆,就职于当地的Shortcut AS公司,这是一家专注于开源技术、Web应用和移动应用的软件企业。在学校里,他学习了信息学、数学和数字信息处理。Christian在职业生涯中,专门从事Web应用程序和前端技术,如JavaScript、CSS和HTML,这些技术他在HTML 4.01规格定稿的时代就充满激情地参与了。

      作为一名顾问,Christian在挪威曾与许多高端的公司合作,包括金融和电信行业的领头公司,他在那里开发从小到大的Web应用程序,内容涉及从普通的CMSbacked电子商务企业网站到自助服务的应用程序。

      最近几年,Christian一直是一名活跃的博客写手。出于和无偿给予了他如此巨大收获的社区相同的分享和贡献的愿望,Christian参与了相当数量的开源项目并为它们做了不少贡献。

      参与了多个JavaScript代码数量少到可以忽略不计的项目之后,Christian感受到了“牛仔风格”的开发之痛。为了提高代码质量、开发者的信心,以及修改和维护代码的能力,并大大地简化这个过程,他在过去的几年中花费了大量的工作和业余时间来研究JavaScript中的单元测试和测试驱动开发。作为一个铁杆的TDD支持者,同时又使用传统的服务器端的开发语言,那么牛仔风格的JavaScript开发手段自然也就呼之欲出了。这种激情的集大成之作,就是你现在你手中的这本书。 译者序

    前言

    致谢

    关于作者

    第一部分 测试驱动开发

    第1章 自动化测试 

    1.1 单元测试 

    1.1.1 单元测试框架 

    1.1.2 JavaScript日期函数strftime 

    1.2 断言 

    1.3 测试函数、用例和套件 

    1.4 集成测试 

    1.5 单元测试的好处 

    1.5.1 回归测试 

    1.5.2 重构 

    1.5.3 跨浏览器的测试 

    1.5.4 其他的一些好处 

    1.6 单元测试中的陷阱 

    1.7 小结 

    第2章 测试驱动开发的过程 

    2.1 测试驱动开发的目的与目标 

    2.1.1 开发顺序的颠倒 

    2.1.2 测试驱动开发中的设计 

    2.2 过程 

    2.2.1 步骤1:编写一个测试 

    2.2.2 步骤2:观看测试失败 

    2.2.3 步骤3:使测试通过 

    2.2.4 步骤4:重构以消除冗余 

    2.2.5 打肥皂、冲洗、重复 

    2.3 让测试驱动开发简便易行 

    2.4 测试驱动开发的好处 

    2.4.1 有效的代码 

    2.4.2 遵循单一职责原则 

    2.4.3 强制有意识的开发 

    2.4.4 提高生产效率 

    2.5 小结 

    第3章 行业工具 

    3.1 xUnit测试框架 

    3.1.1 行为驱动开发 

    3.1.2 持续集成 

    3.1.3 异步测试 

    3.1.4 xUnit测试框架的特点 

    3.1.5 断言 

    3.1.6 依赖关系 

    3.2 浏览器内的测试框架 

    3.2.1 YUI Test 

    3.2.2 其他浏览器内的测试框架 

    3.3 无头测试框架 

    3.3.1 交叉检查 

    3.3.2 Rhino与env.js 

    3.3.3 无头测试框架的缺点 

    3.4 一个掌管一切的测试运行器 

    3.4.1 JsTestDriver是怎样工作的 

    3.4.2 JsTestDriver的缺点 

    3.4.3 安装 

    3.4.4 在IDE里使用JsTestDriver 

    3.4.5 提高命令行效率 

    3.4.6 断言 

    3.5 小结 

    第4章 从测试中学习 

    4.1 用单元测试探索JavaScript 

    4.1.1 观察法编程的缺陷 

    4.1.2 学习测试的最佳点 

    4.2 性能测试 

    4.2.1 基准和相对性能 

    4.2.2 性能评测和定位瓶颈 

    4.3 小结 

    第二部分 开发人员的JavaScript

    第5章 函数 

    5.1 定义函数 

    5.1.1 函数声明 

    5.1.2 函数表达式 

    5.1.3 Function构造器 

    5.2 调用函数 

    5.2.1 arguments对象 

    5.2.2 形参和arguments 

    5.3 作用域和执行上下文 

    5.3.1 执行上下文 

    5.3.2 变量对象 

    5.3.3 活动对象 

    5.3.4 全局对象 

    5.3.5 作用域链 

    5.3.6 再访函数表达式 

    5.4 this关键字 

    5.4.1 隐式地设置this 

    5.4.2 显式地设置this 

    5.4.3 使用原初类型当做this 

    5.5 小结 

    第6章 函数和闭包的应用 

    6.1 绑定函数 

    6.1.1 this被丢弃:一个Lightbox的例子 

    6.1.2 通过一个匿名函数解决this问题 

    6.1.3 Function.prototype.bind 

    6.1.4 绑定参数 

    6.1.5 局部套用 

    6.2 被立即调用的匿名函数 

    6.2.1 Ad Hoc作用域 

    6.2.2 命名空间 

    6.3 状态函数 

    6.3.1 生成唯一的标识符 

    6.3.2 迭代器 

    6.4 记忆 

    6.5 小结 

    第7章 对象和原型继承 

    7.1 对象和属性 

    7.1.1 属性访问 

    7.1.2 原型链 

    7.1.3 通过原型链实现对象扩展 

    7.1.4 可枚举属性 

    7.1.5 属性的特性 

    7.2 使用构造器创建对象 

    7.2.1 prototype和[[Prototype]] 

    7.2.2 使用new创建对象 

    7.2.3 构造器原型 

    7.2.4 构造器的问题 

    7.3 伪经典结构的继承 

    7.3.1 继承函数 

    7.3.2 访问[[Prototype]] 

    7.3.3 实现super 

    7.4 封装和信息隐藏 

    7.4.1 私有方法 

    7.4.2 私有成员和特权方法 

    7.4.3 函数式继承 

    7.5 对象组合和混搭体 

    7.5.1 Object.create方法 

    7.5.2 tddjs.extend方法 

    7.5.3 混搭体 

    7.6 小结 

    第8章 ECMAScript 

    8.1 JavaScript不远的未来 

    8.2 对象模型的更新 

    8.2.1 属性的特性 

    8.2.2 原型继承 

    8.2.3 Getter和Setter 

    8.2.4 使用属性的特性 

    8.2.5 作为属性标识符的保留关键字 

    8.3 严格模式 

    8.3.1 启用严格模式 

    8.3.2 严格模式带来的改变 

    8.4 各种新内容及改进 

    8.4.1 原生的JSON 

    8.4.2 Function.prototype.bind 

    8.4.3 关于数组 

    8.5 小结 

    第9章 不唐突的JavaScript 

    9.1 不唐突的JavaScript的目标 

    9.2 不唐突的JavaScript的规则 

    9.2.1 唐突的标签式面板 

    9.2.2 简洁的标签式面板标记 

    9.2.3 TDD和渐进增强 

    9.3 不要做任何假设 

    9.3.1 不要假设只有你一个人 

    9.3.2 不要假设标记是正确的 

    9.3.3 不要假设所有用户的需求都一样 

    9.3.4 不要假设支持 

    9.4 规则何时适用 

    9.5 不唐突的标签式面板的例子 

    9.5.1 建立测试 

    9.5.2 tabController对象 

    9.5.3 activateTab方法 

    9.5.4 使用标签控制器 

    9.6 小结 

    第10章 特性检测 

    10.1 浏览器嗅探 

    10.1.1 用户代理嗅探 

    10.1.2 对象检测 

    10.1.3 浏览器嗅探的状态 

    10.2 正确使用对象检测 

    10.2.1 检查对象是否存在 

    10.2.2 类型检查 

    10.2.3 原生和宿主对象 

    10.2.4 使用测试样例 

    10.2.5 何时测试 

    10.3 特性检测DOM事件 

    10.4 特性检测CSS属性 

    10.5 跨浏览器事件处理例程 

    10.6 使用特性检测 

    10.6.1 向前进 

    10.6.2 无法检测到的特性 

    10.7 小结 

    第三部分 JavaScript测试驱动开发实践

    第11章 观察者模式 

    11.1 JavaScript中的观察者 

    11.1.1 观察物库 

    11.1.2 设置环境 

    11.2 添加观察者 

    11.2.1 第一个测试 

    11.2.2 重构 

    11.3 检查观察者 

    11.3.1 测试 

    11.3.2 重构 

    11.4 通知观察者 

    11.4.1 确保观察者被调用 

    11.4.2 传递参数 

    11.5 错误处理 

    11.5.1 添加假的观察者 

    11.5.2 有问题的观察者 

    11.5.3 记录调用顺序 

    11.6 观察任意对象 

    11.6.1 让构造器成为过去式 

    11.6.2 用对象来替换构造器 

    11.6.3 重命名方法 

    11.7 观察任意事件 

    11.7.1 支持observe中的事件 

    11.7.2 支持notify中的事件 

    11.8 小结 

    第12章 抽象化浏览器区别:Ajax 

    12.1 以测试驱动来开发一个请求API 

    12.1.1 发现浏览器的不一致 

    12.1.2 开发策略 

    12.1.3 目标 

    12.2 实现请求接口 

    12.2.1 项目布局 

    12.2.2 选择接口风格 

    12.3 创建一个XMLHttpRequest对象 

    12.3.1 第一个测试 

    12.3.2 XMLHttpRequest背景知识 

    12.3.3 实现tddjs.ajax.create 

    12.3.4 更强的特性检测 

    12.4 编写Get请求 

    12.4.1 需要一个URL 

    12.4.2 为XMLHttpRequest对象创建桩 

    12.4.3 处理状态的变化 

    12.4.4 处理状态变化 

    12.5 使用Ajax API 

    12.5.1 集成测试 

    12.5.2 测试结果 

    12.5.3 微妙的麻烦 

    12.5.4 本地请求 

    12.5.5 测试状态 

    12.6 发出POST请求 

    12.6.1 为POST做准备 

    12.6.2 发送数据 

    12.6.3 设置请求头信息 

    12.7 重审请求API 

    12.8 小结 

    第13章 使用Ajax和Comet将数据流式化 

    13.1 数据轮询 

    13.1.1 项目结构 

    13.1.2 轮询器:tddjs.ajax.poller 

    13.1.3 定时器测试 

    13.1.4 可配置的头和回调 

    13.1.5 单行接口 

    13.2 Comet 

    13.2.1 永不消失的框架 

    13.2.2 流式化XMLHttpRequest 

    13.2.3 HTML5 

    13.3 长轮询的XMLHttpRequest 

    13.3.1 实现长轮询支持 

    13.3.2 避免缓存问题 

    13.3.3 特性检测 

    13.4 Comet客户端 

    13.4.1 消息格式 

    13.4.2 介绍ajax.cometClient 

    13.4.3 分发数据 

    13.4.4 添加观察者 

    13.4.5 服务器连接 

    13.4.6 跟踪请求和接收到的数据 

    13.4.7 发布数据 

    13.4.8 特性检测 

    13.5 小结 

    第14章 基于Node.js的服务器端JavaScript 

    14.1 Node.js运行时环境 

    14.1.1 环境设置 

    14.1.2 起点 

    14.2 控制器 

    14.2.1 CommonJS规则模块 

    14.2.2 定义模块:首测 

    14.2.3 建立控制器 

    14.2.4 基于POST方式添加消息 

    14.2.5 对请求做出响应 

    14.2.6 将应用程序用于实践 

    14.3 域模型和存储器 

    14.3.1 创建聊天室 

    14.3.2 Node中的输入输出 

    14.3.3 添加聊天信息 

    14.3.4 获取聊天信息 

    14.4 Promises 

    14.4.1 用promise重构addMessage方法 

    14.4.2 使用promise对象 

    14.5 事件产生器 

    14.5.1 让chatRoom对象成为一个事件产生器 

    14.5.2 等待聊天信息 

    14.6 回到控制器 

    14.6.1 完成Post方法 

    14.6.2 通过GET方法输出数据流 

    14.6.3 响应头和响应体 

    14.7 小结 

    第15章 TDD与DOM操作:聊天室客户端程序 

    15.1 客户端的蓝图 

    15.1.1 目录结构 

    15.1.2 选择方法 

    15.2 用户表单 

    15.2.1 视图的设置 

    15.2.2 处理提交事件 

    15.2.3 特征测试 

    15.3 用Node.js后端使用客户端 

    15.4 聊天信息列表 

    15.4.1 设置模型 

    15.4.2 设置视图 

    15.4.3 添加聊天信息 

    15.4.4 来自同一用户的重复内容 

    15.4.5 特征测试 

    15.4.6 动手实验 

    15.5 聊天信息表单 

    15.5.1 建立测试用例 

    15.5.2 设置视图 

    15.5.3 发布聊天信息 

    15.5.4 特征测试 

    15.6 聊天室客户端的最终版本 

    15.6.1 收尾工作 

    15.6.2 部署时的注意事项 

    15.7 小结 

    第四部分 测试模式

    第16章 模拟对象和创建桩 

    16.1 测试替身概述 

    16.1.1 特技替身 

    16.1.2 假对象 

    16.1.3 哑对象 

    16.2 测试验证 

    16.2.1 状态验证 

    16.2.2 行为验证 

    16.2.3 验证策略的作用 

    16.3 桩 

    16.3.1 使用桩来避免不方便的接口 

    16.3.2 使用桩让系统通过特定代码路径 

    16.3.3 使用桩来制造麻烦 

    16.4 测试间谍 

    16.4.1 测试间接输入 

    16.4.2 检测调用细节 

    16.5 使用桩库 

    16.5.1 创建桩函数 

    16.5.2 给方法创建桩 

    16.5.3 内建行为验证 

    16.5.4 创建桩和Node.js 

    16.6 模拟对象 

    16.6.1 恢复被模拟的函数 

    16.6.2 匿名的模拟对象 

    16.6.3 多重期望 

    16.6.4 对this值的期望 

    16.7 模拟对象还是桩 

    16.8 小结 

    第17章 编写良好的单元测试 

    17.1 提高可读性 

    17.1.1 清楚地命名测试以表明意图 

    17.1.2 用设置、应用和验证块对测试进行结构化 

    17.1.3 使用更高级的抽象保持测试的简单性 

    17.1.4 减少重复,而不是减少明确性 

    17.2 将测试作为行为规范 

    17.2.1 一次只测试一种行为 

    17.2.2 每个行为只测试一次 

    17.2.3 在测试中隔离行为 

    17.3 与测试中的缺陷做斗争 

    17.3.1 在测试通过之前运行它们 

    17.3.2 首先编写测试 

    17.3.3 搅乱和破坏代码 

    17.3.4 使用JsLint 

    17.4 小结 

    参考文献
  • 内容简介:
      《测试驱动的JavaScript开发》是一本完整的、基于最佳实践的JavaScript测试指南,同时又有着测试驱动开发方法所带来的质量保证。本书涵盖了将最先进的自动化测试用于JavaScript开发环境的方方面面,带领读者走过整个开发的生命周期,从项目启动到应用程序部署。

      本书面向的是JavaScript开发人员。无论您是一位Ruby开发人员,主要关注Ruby on Rails;或者是一名Java或.NET开发人员,忙于构建Web应用;又或者是一名前端Web开发人员,以JavaScript、CSS和HTML为首要工具;甚至是一名后端开发人员,对JavaScript知之甚少,本书将对您非常有用。
  • 作者简介:
      Christian Johansen居住在挪威奥斯陆,就职于当地的Shortcut AS公司,这是一家专注于开源技术、Web应用和移动应用的软件企业。在学校里,他学习了信息学、数学和数字信息处理。Christian在职业生涯中,专门从事Web应用程序和前端技术,如JavaScript、CSS和HTML,这些技术他在HTML 4.01规格定稿的时代就充满激情地参与了。

      作为一名顾问,Christian在挪威曾与许多高端的公司合作,包括金融和电信行业的领头公司,他在那里开发从小到大的Web应用程序,内容涉及从普通的CMSbacked电子商务企业网站到自助服务的应用程序。

      最近几年,Christian一直是一名活跃的博客写手。出于和无偿给予了他如此巨大收获的社区相同的分享和贡献的愿望,Christian参与了相当数量的开源项目并为它们做了不少贡献。

      参与了多个JavaScript代码数量少到可以忽略不计的项目之后,Christian感受到了“牛仔风格”的开发之痛。为了提高代码质量、开发者的信心,以及修改和维护代码的能力,并大大地简化这个过程,他在过去的几年中花费了大量的工作和业余时间来研究JavaScript中的单元测试和测试驱动开发。作为一个铁杆的TDD支持者,同时又使用传统的服务器端的开发语言,那么牛仔风格的JavaScript开发手段自然也就呼之欲出了。这种激情的集大成之作,就是你现在你手中的这本书。
  • 目录:
    译者序

    前言

    致谢

    关于作者

    第一部分 测试驱动开发

    第1章 自动化测试 

    1.1 单元测试 

    1.1.1 单元测试框架 

    1.1.2 JavaScript日期函数strftime 

    1.2 断言 

    1.3 测试函数、用例和套件 

    1.4 集成测试 

    1.5 单元测试的好处 

    1.5.1 回归测试 

    1.5.2 重构 

    1.5.3 跨浏览器的测试 

    1.5.4 其他的一些好处 

    1.6 单元测试中的陷阱 

    1.7 小结 

    第2章 测试驱动开发的过程 

    2.1 测试驱动开发的目的与目标 

    2.1.1 开发顺序的颠倒 

    2.1.2 测试驱动开发中的设计 

    2.2 过程 

    2.2.1 步骤1:编写一个测试 

    2.2.2 步骤2:观看测试失败 

    2.2.3 步骤3:使测试通过 

    2.2.4 步骤4:重构以消除冗余 

    2.2.5 打肥皂、冲洗、重复 

    2.3 让测试驱动开发简便易行 

    2.4 测试驱动开发的好处 

    2.4.1 有效的代码 

    2.4.2 遵循单一职责原则 

    2.4.3 强制有意识的开发 

    2.4.4 提高生产效率 

    2.5 小结 

    第3章 行业工具 

    3.1 xUnit测试框架 

    3.1.1 行为驱动开发 

    3.1.2 持续集成 

    3.1.3 异步测试 

    3.1.4 xUnit测试框架的特点 

    3.1.5 断言 

    3.1.6 依赖关系 

    3.2 浏览器内的测试框架 

    3.2.1 YUI Test 

    3.2.2 其他浏览器内的测试框架 

    3.3 无头测试框架 

    3.3.1 交叉检查 

    3.3.2 Rhino与env.js 

    3.3.3 无头测试框架的缺点 

    3.4 一个掌管一切的测试运行器 

    3.4.1 JsTestDriver是怎样工作的 

    3.4.2 JsTestDriver的缺点 

    3.4.3 安装 

    3.4.4 在IDE里使用JsTestDriver 

    3.4.5 提高命令行效率 

    3.4.6 断言 

    3.5 小结 

    第4章 从测试中学习 

    4.1 用单元测试探索JavaScript 

    4.1.1 观察法编程的缺陷 

    4.1.2 学习测试的最佳点 

    4.2 性能测试 

    4.2.1 基准和相对性能 

    4.2.2 性能评测和定位瓶颈 

    4.3 小结 

    第二部分 开发人员的JavaScript

    第5章 函数 

    5.1 定义函数 

    5.1.1 函数声明 

    5.1.2 函数表达式 

    5.1.3 Function构造器 

    5.2 调用函数 

    5.2.1 arguments对象 

    5.2.2 形参和arguments 

    5.3 作用域和执行上下文 

    5.3.1 执行上下文 

    5.3.2 变量对象 

    5.3.3 活动对象 

    5.3.4 全局对象 

    5.3.5 作用域链 

    5.3.6 再访函数表达式 

    5.4 this关键字 

    5.4.1 隐式地设置this 

    5.4.2 显式地设置this 

    5.4.3 使用原初类型当做this 

    5.5 小结 

    第6章 函数和闭包的应用 

    6.1 绑定函数 

    6.1.1 this被丢弃:一个Lightbox的例子 

    6.1.2 通过一个匿名函数解决this问题 

    6.1.3 Function.prototype.bind 

    6.1.4 绑定参数 

    6.1.5 局部套用 

    6.2 被立即调用的匿名函数 

    6.2.1 Ad Hoc作用域 

    6.2.2 命名空间 

    6.3 状态函数 

    6.3.1 生成唯一的标识符 

    6.3.2 迭代器 

    6.4 记忆 

    6.5 小结 

    第7章 对象和原型继承 

    7.1 对象和属性 

    7.1.1 属性访问 

    7.1.2 原型链 

    7.1.3 通过原型链实现对象扩展 

    7.1.4 可枚举属性 

    7.1.5 属性的特性 

    7.2 使用构造器创建对象 

    7.2.1 prototype和[[Prototype]] 

    7.2.2 使用new创建对象 

    7.2.3 构造器原型 

    7.2.4 构造器的问题 

    7.3 伪经典结构的继承 

    7.3.1 继承函数 

    7.3.2 访问[[Prototype]] 

    7.3.3 实现super 

    7.4 封装和信息隐藏 

    7.4.1 私有方法 

    7.4.2 私有成员和特权方法 

    7.4.3 函数式继承 

    7.5 对象组合和混搭体 

    7.5.1 Object.create方法 

    7.5.2 tddjs.extend方法 

    7.5.3 混搭体 

    7.6 小结 

    第8章 ECMAScript 

    8.1 JavaScript不远的未来 

    8.2 对象模型的更新 

    8.2.1 属性的特性 

    8.2.2 原型继承 

    8.2.3 Getter和Setter 

    8.2.4 使用属性的特性 

    8.2.5 作为属性标识符的保留关键字 

    8.3 严格模式 

    8.3.1 启用严格模式 

    8.3.2 严格模式带来的改变 

    8.4 各种新内容及改进 

    8.4.1 原生的JSON 

    8.4.2 Function.prototype.bind 

    8.4.3 关于数组 

    8.5 小结 

    第9章 不唐突的JavaScript 

    9.1 不唐突的JavaScript的目标 

    9.2 不唐突的JavaScript的规则 

    9.2.1 唐突的标签式面板 

    9.2.2 简洁的标签式面板标记 

    9.2.3 TDD和渐进增强 

    9.3 不要做任何假设 

    9.3.1 不要假设只有你一个人 

    9.3.2 不要假设标记是正确的 

    9.3.3 不要假设所有用户的需求都一样 

    9.3.4 不要假设支持 

    9.4 规则何时适用 

    9.5 不唐突的标签式面板的例子 

    9.5.1 建立测试 

    9.5.2 tabController对象 

    9.5.3 activateTab方法 

    9.5.4 使用标签控制器 

    9.6 小结 

    第10章 特性检测 

    10.1 浏览器嗅探 

    10.1.1 用户代理嗅探 

    10.1.2 对象检测 

    10.1.3 浏览器嗅探的状态 

    10.2 正确使用对象检测 

    10.2.1 检查对象是否存在 

    10.2.2 类型检查 

    10.2.3 原生和宿主对象 

    10.2.4 使用测试样例 

    10.2.5 何时测试 

    10.3 特性检测DOM事件 

    10.4 特性检测CSS属性 

    10.5 跨浏览器事件处理例程 

    10.6 使用特性检测 

    10.6.1 向前进 

    10.6.2 无法检测到的特性 

    10.7 小结 

    第三部分 JavaScript测试驱动开发实践

    第11章 观察者模式 

    11.1 JavaScript中的观察者 

    11.1.1 观察物库 

    11.1.2 设置环境 

    11.2 添加观察者 

    11.2.1 第一个测试 

    11.2.2 重构 

    11.3 检查观察者 

    11.3.1 测试 

    11.3.2 重构 

    11.4 通知观察者 

    11.4.1 确保观察者被调用 

    11.4.2 传递参数 

    11.5 错误处理 

    11.5.1 添加假的观察者 

    11.5.2 有问题的观察者 

    11.5.3 记录调用顺序 

    11.6 观察任意对象 

    11.6.1 让构造器成为过去式 

    11.6.2 用对象来替换构造器 

    11.6.3 重命名方法 

    11.7 观察任意事件 

    11.7.1 支持observe中的事件 

    11.7.2 支持notify中的事件 

    11.8 小结 

    第12章 抽象化浏览器区别:Ajax 

    12.1 以测试驱动来开发一个请求API 

    12.1.1 发现浏览器的不一致 

    12.1.2 开发策略 

    12.1.3 目标 

    12.2 实现请求接口 

    12.2.1 项目布局 

    12.2.2 选择接口风格 

    12.3 创建一个XMLHttpRequest对象 

    12.3.1 第一个测试 

    12.3.2 XMLHttpRequest背景知识 

    12.3.3 实现tddjs.ajax.create 

    12.3.4 更强的特性检测 

    12.4 编写Get请求 

    12.4.1 需要一个URL 

    12.4.2 为XMLHttpRequest对象创建桩 

    12.4.3 处理状态的变化 

    12.4.4 处理状态变化 

    12.5 使用Ajax API 

    12.5.1 集成测试 

    12.5.2 测试结果 

    12.5.3 微妙的麻烦 

    12.5.4 本地请求 

    12.5.5 测试状态 

    12.6 发出POST请求 

    12.6.1 为POST做准备 

    12.6.2 发送数据 

    12.6.3 设置请求头信息 

    12.7 重审请求API 

    12.8 小结 

    第13章 使用Ajax和Comet将数据流式化 

    13.1 数据轮询 

    13.1.1 项目结构 

    13.1.2 轮询器:tddjs.ajax.poller 

    13.1.3 定时器测试 

    13.1.4 可配置的头和回调 

    13.1.5 单行接口 

    13.2 Comet 

    13.2.1 永不消失的框架 

    13.2.2 流式化XMLHttpRequest 

    13.2.3 HTML5 

    13.3 长轮询的XMLHttpRequest 

    13.3.1 实现长轮询支持 

    13.3.2 避免缓存问题 

    13.3.3 特性检测 

    13.4 Comet客户端 

    13.4.1 消息格式 

    13.4.2 介绍ajax.cometClient 

    13.4.3 分发数据 

    13.4.4 添加观察者 

    13.4.5 服务器连接 

    13.4.6 跟踪请求和接收到的数据 

    13.4.7 发布数据 

    13.4.8 特性检测 

    13.5 小结 

    第14章 基于Node.js的服务器端JavaScript 

    14.1 Node.js运行时环境 

    14.1.1 环境设置 

    14.1.2 起点 

    14.2 控制器 

    14.2.1 CommonJS规则模块 

    14.2.2 定义模块:首测 

    14.2.3 建立控制器 

    14.2.4 基于POST方式添加消息 

    14.2.5 对请求做出响应 

    14.2.6 将应用程序用于实践 

    14.3 域模型和存储器 

    14.3.1 创建聊天室 

    14.3.2 Node中的输入输出 

    14.3.3 添加聊天信息 

    14.3.4 获取聊天信息 

    14.4 Promises 

    14.4.1 用promise重构addMessage方法 

    14.4.2 使用promise对象 

    14.5 事件产生器 

    14.5.1 让chatRoom对象成为一个事件产生器 

    14.5.2 等待聊天信息 

    14.6 回到控制器 

    14.6.1 完成Post方法 

    14.6.2 通过GET方法输出数据流 

    14.6.3 响应头和响应体 

    14.7 小结 

    第15章 TDD与DOM操作:聊天室客户端程序 

    15.1 客户端的蓝图 

    15.1.1 目录结构 

    15.1.2 选择方法 

    15.2 用户表单 

    15.2.1 视图的设置 

    15.2.2 处理提交事件 

    15.2.3 特征测试 

    15.3 用Node.js后端使用客户端 

    15.4 聊天信息列表 

    15.4.1 设置模型 

    15.4.2 设置视图 

    15.4.3 添加聊天信息 

    15.4.4 来自同一用户的重复内容 

    15.4.5 特征测试 

    15.4.6 动手实验 

    15.5 聊天信息表单 

    15.5.1 建立测试用例 

    15.5.2 设置视图 

    15.5.3 发布聊天信息 

    15.5.4 特征测试 

    15.6 聊天室客户端的最终版本 

    15.6.1 收尾工作 

    15.6.2 部署时的注意事项 

    15.7 小结 

    第四部分 测试模式

    第16章 模拟对象和创建桩 

    16.1 测试替身概述 

    16.1.1 特技替身 

    16.1.2 假对象 

    16.1.3 哑对象 

    16.2 测试验证 

    16.2.1 状态验证 

    16.2.2 行为验证 

    16.2.3 验证策略的作用 

    16.3 桩 

    16.3.1 使用桩来避免不方便的接口 

    16.3.2 使用桩让系统通过特定代码路径 

    16.3.3 使用桩来制造麻烦 

    16.4 测试间谍 

    16.4.1 测试间接输入 

    16.4.2 检测调用细节 

    16.5 使用桩库 

    16.5.1 创建桩函数 

    16.5.2 给方法创建桩 

    16.5.3 内建行为验证 

    16.5.4 创建桩和Node.js 

    16.6 模拟对象 

    16.6.1 恢复被模拟的函数 

    16.6.2 匿名的模拟对象 

    16.6.3 多重期望 

    16.6.4 对this值的期望 

    16.7 模拟对象还是桩 

    16.8 小结 

    第17章 编写良好的单元测试 

    17.1 提高可读性 

    17.1.1 清楚地命名测试以表明意图 

    17.1.2 用设置、应用和验证块对测试进行结构化 

    17.1.3 使用更高级的抽象保持测试的简单性 

    17.1.4 减少重复,而不是减少明确性 

    17.2 将测试作为行为规范 

    17.2.1 一次只测试一种行为 

    17.2.2 每个行为只测试一次 

    17.2.3 在测试中隔离行为 

    17.3 与测试中的缺陷做斗争 

    17.3.1 在测试通过之前运行它们 

    17.3.2 首先编写测试 

    17.3.3 搅乱和破坏代码 

    17.3.4 使用JsLint 

    17.4 小结 

    参考文献
查看详情
系列丛书 / 更多
测试驱动的JavaScript开发
PHP和MySQL Web开发(原书第4版):PHP and MySQL Web Development, Fourth Edition
[澳]Luke、[澳]Luke Welling 著;武欣 译
测试驱动的JavaScript开发
Objective-C 2.0程序设计
[美]科施恩 著;张波 译
测试驱动的JavaScript开发
软件测试实用技术与常用模板
李龙 著
测试驱动的JavaScript开发
OpenGL编程指南(原书第7版)
[美]施瑞奈尔 著;李军 译
测试驱动的JavaScript开发
PHP和MySQL Web开发
威利、武欣 著
测试驱动的JavaScript开发
Windows高级调试
[美]赫瓦特 著;聂雪军 译
测试驱动的JavaScript开发
测试驱动的面向对象软件开发
[美]弗里曼、[美]普雷斯 著;王海鹏 译
测试驱动的JavaScript开发
成功的软件开发(原书第2版)
多纳尔德森 编;刘列励 译
测试驱动的JavaScript开发
PHP和MySQL Web应用开发核心技术
温施耐德 著
测试驱动的JavaScript开发
重构:Ruby版
[美]菲尔德斯 著;徐旭铭 译
测试驱动的JavaScript开发
Windows并发编程指南
[美]杜飞(Duffy J.) 著;聂雪军 译
测试驱动的JavaScript开发
自动化软件测试实施指南
[美]达斯汀、[美]加瑞特、[美]高夫 著;余昭辉 译
相关图书 / 更多
测试驱动的JavaScript开发
测试设计思想
周海旭
测试驱动的JavaScript开发
测试与传感器技术(英文版)
张新荣;张小栋;王斌华;杜向党
测试驱动的JavaScript开发
测试商品,请勿下单
李艳梅 译;J. Fisher
测试驱动的JavaScript开发
测试的力量
Bazerman 著;[英]迈克尔·卢卡(Michael Luca)、[加]马克斯·巴泽曼(Max、H.、车品觉 译
测试驱动的JavaScript开发
测试系统构建技术 ——基于C++和Qt的框架软件
赵文波
测试驱动的JavaScript开发
测试原理与技术
王文;杜正春
测试驱动的JavaScript开发
测试驱动开发:入门、实战与进阶
萨利姆·西迪基
测试驱动的JavaScript开发
测试技术基础
杨超
测试驱动的JavaScript开发
测试开发实战教程
霍格沃兹测试开发学社
测试驱动的JavaScript开发
测试架构师修炼之道:从测试工程师到测试架构师(第2版)
刘琛梅
测试驱动的JavaScript开发
测试商业创意:把创意变成伟大的生意
[美]戴维·J. 布兰德 (瑞士)亚历山大·奥斯特瓦德
测试驱动的JavaScript开发
测试工程师Python开发实战
胡通
您可能感兴趣 / 更多
测试驱动的JavaScript开发
孩子,把你的手给我1:怎么说孩子才爱听,怎么教孩子才肯学?帮助每一位3-12岁孩子的父母结束与孩子的所有冲突!
[美]海姆·G.吉诺特
测试驱动的JavaScript开发
怎样做成大事
[美]丹·加德纳(Dan Gardner) 著;贾拥民 译;湛庐文化 出品;[丹麦]傅以斌(Bent Flyvbjerg)
测试驱动的JavaScript开发
1200年希腊罗马神话
[美]伊迪丝·汉密尔顿
测试驱动的JavaScript开发
黄金圈法则
[美]西蒙·斯涅克 著;磨铁文化 出品
测试驱动的JavaScript开发
汤姆·索亚历险记 彩图注音版 一二三四年级5-6-7-8-9岁小学生课外阅读经典 儿童文学无障碍有声伴读世界名著童话故事
[美]马克 吐温
测试驱动的JavaScript开发
富兰克林自传 名家全译本 改变无数人命运的励志传奇 埃隆马斯克反复推荐 赠富兰克林签名照及精美插图
[美]本杰明·富兰克林 著;李自修 译
测试驱动的JavaScript开发
意大利文艺复兴新艺术史
[美]迈克尔·韦恩·科尔 著;[美]斯蒂芬·J·坎贝尔;邵亦杨
测试驱动的JavaScript开发
汤姆素亚历险记:中小学生课外阅读快乐读书吧 儿童文学无障碍有声伴读世界名著童话故事
[美]马克·吐温
测试驱动的JavaScript开发
老人与海 彩图注音版 一二三四年级5-6-7-8-9岁小学生课外阅读经典 儿童文学无障碍有声伴读世界名著童话故事
[美]海明威
测试驱动的JavaScript开发
养育的觉醒:全面激发孩子自驱力,教你如何心平气和做妈妈
[美]凯文·莱曼 著;唐晓璐 译;斯坦威 出品
测试驱动的JavaScript开发
你在等什么?
[美]斯科特·明钦 著;[中]易万 译;[美]马特 ·斐兰 绘
测试驱动的JavaScript开发
国际大奖图画书系列 共11册(小老鼠的恐惧的大书,大灰狼,红豆与菲比,别烦我,下雪了 ,穿靴子的猫 ,先有蛋,绿 ,特别快递,如果你想看鲸鱼 ,一个部落的孩子 ) 麦克米伦世纪
[美]莱恩·史密斯 (英)埃米莉·格雷维特 (美)劳拉·瓦卡罗·等/文 (英)埃米莉·格雷维特 等/图 彭懿 杨玲玲 阿甲 孙慧阳 白薇 译