codecamp

Ember 测试简介

英文原文:https://guides.emberjs.com/v2.7.0/testing/

测试简介

测试是Ember。js框架开发环节中很重要的一环。

现在假设你正在利用Ember框架开发一个博客系统,这个系统包含userpost模型,有登录及创建博客的操作。最后假设你希望在你的程序里实现自动化测试。

测试类型

你一共需要下面这3种类型的测试:

  1. 验收测试Acceptance
  2. 单元测试Unit
  3. 集成测试Integration

验收测试 Acceptance Tests

验收测试是用来确保程序流程正确,且各类交互特性符合用户预期的测试。

验收测试用于确认项目基本功能,保证项目核心功能没有退化,确保该项目的目标得以实现。测试应用的方式和用户与应用程序的交互方式是一致的(比如填写表单,点击按钮)。

在上述的场景中,可能会做如下的验收测试:

  1. 用户可以通过登录表单登录。
  2. 用户可以创建博客。
  3. 当成功保存一篇博客文章后,程序会返回博客列表给用户。
  4. 访客不能访问管理界面。

单元测试 Unit Tests

单元测试是针对程序中的最小可测试单元进行的测试,比如一个类或者一个方法。该测试可以编写与程序逻辑相对的语句来测试相关单元

下面是一些单元测试的具体例子:

  1. 用户姓名是由对应的姓和名组合而成的。
  2. 把博客请求数据正确序列化转换为一个博客模型对象。
  3. 正确格式化博客时间。

集成测试 Integration Tests

集成测试是处于单元测试和验收测试之间的测试。集成测试目的是验证客户端与全系统交互,所有单元测试,以及微观层面具体代码的算法逻辑是否都能通过。

集成测试用来验证应用程序各个模块相互关系,比如若干个UI控件之间的行为。也可以用于确认数据和动作在系统不同的部件中被正确的传递和执行,同时在给定假设条件下,可以提供系统各部件配合运行的情况。

我们建议对每个组件都进行集成测试,因为组件各个组件以相同的方式运行在系统的上下文中,并且组件之间也有相互影响,包括从模板中渲染组件、接收组件生命周期回调函数。

集成测试示例如下:

  1. 用户姓名和日期正确的显示在每篇博文上
  2. 禁止用户在标题栏内输入超过50个字符
  3. 当提交一个没有标题的博客时,显示红色提醒并给出需要标题的错误信息
  4. 博客列表滚动到最顶端显示最新博客

测试框架

QUnit是本手册的默认测试框架,但是Ember.js也支持其他第三方的测试框架。

如何运行测试

在命令行输入ember test来运行测试。也可以通过ember test -server命令,在每次文件改动后,重新运行测试。

在本地开发项目的时候可以通过访问/tests/index.html来运行你的测试,前提是你需要使用命令ember server运行了你的项目。如果你是使用这种方式有一点需要注意:

  • 通过ember server运行的测试,是在开发环境下的测试,调用的是开发环境下的参数
  • 通过ember test --server运行的测试,是在测试环境下的测试,调用的是测试环境下的参数,比如加载的依赖也是不同的。因此我们推荐你使用ebmer test --server来运行测试。

指定测试

使用--filter选项来指定运行部分测试。比如:快速运行当前工作的测试使用命令ember test --filter="dashboard"、运行指定类型的测试使用命令ember test --filter="integration"、可以使用!来排除验收测试ember test --filter="!acceptance"

Ember 自定义序列号器
Ember 验收测试
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }