- Ember.js 指南
- 入门指南 - 介绍
- 入门指南 - 应用规划
- 入门指南 - 创建静态页面
- 入门指南 - 获取Ember.js和相应依赖
- 入门指南 - 添加第一个路由与模板
- 入门指南 - 建立模型
- 入门指南 - 使用静态数据
- 入门指南 - 显示模型数据
- 入门指南 - 显示模型的完成状态
- 入门指南 - 创建新的模型实例
- 入门指南 - 标记模型为完成或未完成
- 入门指南 - 显示未完成待办事项的数量
- 入门指南 - 切换显示和编辑状态
- 入门指南 - 接受修改
- 入门指南 - 删除模型
- 入门指南 - 添加子路由
- 入门指南 - 显示未完成待办事项
- 入门指南 - 显示已完成待办事项
- 入门指南 - 显示所有待办事项
- 入门指南 - 添加移除所有已完成待办事项的按钮
- 入门指南 - 提示所有待办事项已完成
- 入门指南 - 切换已完成和未完成待办事项
- 入门指南 - 更换FixtureAdapter
- 获取 Ember - 获取Ember
- 概念 - 核心概念
- 概念 - 命名惯例
- 对象模型 - 类与实例
- 对象模型 - 计算属性
- 对象模型 - 计算属性和带@each的集合数据
- 对象模型 - 观察器
- 对象模型 - 绑定
- 对象模型 - 重新打开类和实例
- 对象模型 - 绑定,观察器,计算属性:如何选择?
- 应用 - 介绍
- 模板 - 应用模板
- 模板 - Handlebars基础
- 模板 - 条件表达式
- 模板 - 显示项目列表
- 模板 - 切换作用域
- 模板 - 绑定元素属性
- 模板 - 绑定元素类名称
- 模板 - 链接
- 模板 - 操作
- 模板 - 输入助手
- 模板 - 开发助手
- 模板 - 用助手来渲染
- 模板 - 编写助手方法
- 路由 - 介绍
- 路由 - 定义路由
- 路由 - 生成的对象
- 路由 - 指定路由的模型
- 路由 - 设置控制器
- 路由 - 渲染模板
- 路由 - 重定向
- 路由 - 指定地址API
- 路由 - 查询参数
- 路由 - 异步路由
- 路由 - 加载中/错误子状态
- 路由 - 阻止和重试过渡
- 组件 - 介绍
- 组件 - 定义组件
- 组件 - 传递属性
- 组件 - 包裹内容
- 组件 - 自定义组件元素
- 组件 - 使用Action处理用户交互
- 组件 - 从组件发送操作给应用
- 控制器 - 介绍
- 控制器 - 代表单一模型
- 控制器 - 代表多模型
- 控制器 - 管理控制器间的依赖
- 模型 - 介绍
- 模型 - 定义模型
- 模型 - 创建和删除记录
- 模型 - 将记录推入仓库
- 模型 - 持久化记录
- 模型 - 查询记录
- 模型 - 使用记录
- 模型 - 使用Fixture
- 模型 - 连接HTTP服务器
- 模型 - 处理元数据
- 模型 - 自定义适配器
- 模型 - 常见问题
- 视图 - 介绍
- 视图 - 定义视图
- 视图 - 处理事件
- 视图 - 在模板中插入视图
- 视图 - 为视图添加布局
- 视图 - 自定义视图元素
- 视图 - 内置视图
- 视图 - 手动管理视图层级
- 枚举 - 介绍
- 测试 - 介绍
- 测试 - 集成测试
- 测试 - 测试助手
- 测试 - 测试用户交互
- 测试 - 单元测试
- 测试 - 单元测试基础
- 测试 - 测试组件
- 测试 - 测试控制器
- 测试 - 测试路由
- 测试 - 测试模型
- 测试 - 自动化测试
- 配置Ember.js - 禁用基本类型扩展
- 配置Ember.js - 嵌入式应用
- 配置Ember.js - 特性标识
- Cookbook - 简介
- Cookbook - 用户界面与交互
- Cookbook - 事件处理和数据绑定
- Cookbook - 助手与组件
- Cookbook - 使用对象
- 理解Ember.js - 视图层
- 理解Ember.js - 管理异步
- 理解Ember.js - 模板自动更新
- 理解Ember.js - 调试
- 理解Ember.js - 运行循环
测试 - 单元测试
英文原文:http://emberjs.com/guides/testing/unit/
单元测试用于测试代码的一个小片段,确保其功能正常。与集成测试不同,单元测试被限定在一个范围内,并且不需要Ember应用运行。
全局 vs 模块
过去如果没有作为一个全局变量加载整个Ember应用,要对应用进行测试非常困难。通过使用模块(CommonJS,AMD等)来编写应用,可以只加载被测试的部分,而不用将其从全局的应用中抽出来测试。
单元测试助手
Ember-QUnit是Ember的缺省的单元测试助手套件。其可以作为其他测试框架助手的样板来使用。Ember-QUnit使用应用的resolver
来查找并使用moduleFor
和test
助手自动创建被测主体。
测试主体是一个特定测试将围绕其进行断言的一个简单对象的实例。通常测试主体有测试者手动创建。
本指南中的单元测试将采用Ember-QUnit
来完成,不过其中的概念和例子可以非常容易的迁移至其他的框架。
可用的助手
通过加入Ember-QUnit,可以获取一系列测试助手。
moduleFor(fullName [, description [, callbacks]])
- fullName: 单元测试全名。(例如:
controller:application
,route:index
等。) - description: 模块描述。
- callbacks: 完成附加需求的QUnit回调(
setup
和teardown
),可以通过回调来指定测试需要的其他单元)。
- fullName: 单元测试全名。(例如:
moduleForComponent(name [, description [, callbacks]])
- name: 将被用于模板中得简短组件名。(例如:
x-foo
,ic-tabs
等等。) - description: 模块描述。
- callbacks: 完成附加需求的QUnit回调(
setup
和teardown
),可以通过回调来指定测试需要的其他单元)。
- name: 将被用于模板中得简短组件名。(例如:
moduleForModel(fullName [, description [, callbacks]])
- name: 在
store
操作中将使用的简短模型名。(例如:user
,assignmentGroup
等。) - description: 模块描述。
- callbacks: 完成附加需求的QUnit回调(
setup
和teardown
),可以通过回调来指定测试需要的其他单元)。
- name: 在
test
- 与QUnit的
test
期望一样,其包含了用来创建测试主体的subject
函数。 to create the test subject.
- 与QUnit的
setResolver
设置用来从应用容器中查找对象的
resolver
。
设置单元测试
为了对Ember应用进行单元测试,首先需要让Ember知道其在测试模式。为实现这个目的,需要调用Ember.setupForTesting()
。
1 | Ember.setupForTesting(); |
setupForTesting()
函数的调用通知Ember关闭了其自动运行循环的执行。这样使得可以能够自己一定程度上控制运行循环流程。缺省的履行所有承诺和完成所有异步行为的行为被暂停,使得可以在一个已知的状态来作出断言。换句话说,如果已知运行visit
到一个特定的URL,就可以肯定URL被访问并且也是唯一发生的行为。如果并没有采用这种方式,那么断言很可能会在异步行为发生之前就被执行了,以至于断言结果并不是可预知。
在一个基于模块的应用里,可以通过请求模块的导出来访问单元测试助手。然而,如果在测试一个全局的Ember应用,一样可以使用单元测试助手。作为导入ember-qunit
模块的替代方案,需要通过emq.globalize()
来使得单元测试变成全局的。
1 | emq.globalize(); |
这就使得上述的助手变成了全局可用。
解析器
Ember解析器在对应用进行单元测试的时候扮演了一个非常重要的角色。其提供了一个基于名字查找的功能,例如route:index
或者model:post
。
如果没有一个自定义的解析器,或者测试一个全局的Ember应用,解析器应该进行如下的设置:
确定使用应用的命名空间来替代下面一行代码中得App
1 | setResolver(Ember.DefaultResolver.create({ namespace: App }) |
否则,需要获取自定义解析器,并将其传递给setResolver
,就如(ES6示例)中一般:
1 2 3 | import Resolver from './path/to/resolver'; import { setResolver } from 'ember-qunit'; setResolver(Resolver.create()); |
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论