一:测试是什么
为检测特定的目标是否符合标准而采用专用的工具或者方法进行验证,并最终得出特定的结果。html
二:单元测试的意义
对于如今的前端工程,一个标准完整的项目,测试是很是有必要的。不少时候咱们只是完成了项目而忽略了项目测试的部分,测试的意义主要在于下面几点:前端
- TDD(测试驱动开发) 被证实是有效的软件编写原则,它能覆盖更多的功能接口。
- 快速反馈你的功能输出,验证你的想法。
- 保证代码重构的安全性,没有一成不变的代码,测试用例能给你多变的代码结构一个定心丸。
- 易于测试的代码,说明是一个好的设计。作单元测试以前,确定要实例化一个东西,假如这个东西有不少依赖的话,这个测试构造过程将会很是耗时,会影响你的测试效率,怎么办呢?要依赖分离,一个类尽可能保证功能单一,好比视图与功能分离,这样的话,你的代码也便于维护和理解。
三:为何要单元测试
- 首先是一个前端单元测试的根本性起因:JavaScript 是动态语言,缺乏类型检查,编译期间没法定位到错误; JavaScript 宿主的兼容性问题。好比 DOM 操做在不一样浏览器上的表现。
- 正确性:测试能够验证代码的正确性,在上线前作到内心有底。
- 自动化:固然手工也能够测试,经过console能够打印出内部信息,可是这是一次性的事情,下次测试还须要从头来过,效率不能获得保证。经过编写测试用例,能够作到一次编写,屡次运行。
- 解释性:测试用例用于测试接口、模块的重要性,那么在测试用例中就会涉及如何使用这些API。其余开发人员若是要使用这些API,那阅读测试用例是一种很好地途径,有时比文档说明更清晰。
- 驱动开发,指导设计:代码被测试的前提是代码自己的可测试性,那么要保证代码的可测试性,就须要在开发中注意API的设计,TDD将测试前移就是起到这么一个做用。
- 保证重构:互联网行业产品迭代速度很快,迭代后必然存在代码重构的过程,那怎么才能保证重构后代码的质量呢?有测试用例作后盾,就能够大胆的进行重构。
四:经常使用的单元测试方法论
- TDD: Test-driven development (测试驱动开发),过程以下:
- 需求分析,思考实现。考虑如何“使用”产品代码,是一个实例方法仍是一个类方法,是从构造函数传参仍是从方法调用传参,方法的命名,返回值等。这时其实就是在作设计,并且设计以代码来体现。此时测试为红
- 实现代码让测试为”绿灯“
- 重构,而后重复测试
- 最终符合全部要求即:
- 每一个概念都被清晰的表达
- 代码中无自我重复
- 没有多余的东西
- 经过测试
- BDD: Behavior-Driven Development (行为驱动开发) ,过程以下:
- 从业务的角度定义具体的,以及可衡量的目标
- 找到一种能够达到设定目标的、对业务最重要的那些功能的方法
- 而后像故事同样描述出一个个具体可执行的行为。其描述方法基于一些通用词汇,这些词汇具备准确无误的表达能力和一致的含义。例如,expect, should, assert
- 寻找合适语言及方法,对行为进行实现
-
测试人员检验产品运行结果是否符合预期行为。最大程度的交付出符合用户指望的产品,避免表达不一致带来的问题node
五:Mocha/Karma+Travis.CI的前端测试工做流
Mocha:mocha 是一个功能丰富的前端测试框架。所谓"测试框架",就是运行测试的工具。经过它,能够为JavaScript应用添加测试,从而保证代码的质量。mocha 既能够基于 Node.js 环境运行 也能够在浏览器环境运行。官网地址git
Karma:一个基于Node.js的JavaScript测试执行过程管理工具(Test Runner)。该工具可用于测试全部主流Web浏览器,也可集成到CI(Continuous integration)工具,也可和其余代码编辑器一块儿使用。这个测试工具的一个强大特性就是,它能够监控文件的变化,而后自行执行,经过console.log显示测试结果。Karma的一个强大特性就是,它能够监控一套文件的变换,并当即开始测试已保存的文件,用户无需离开文本编辑器。测试结果一般显示在命令行中,而非代码编辑器。这也就让 Karma 基本能够和任何 JS 编辑器一块儿使用。github
Travis.CI: 提供的是持续集成服务(Continuous Integration,简称 CI)。它绑定 Github 上面的项目,只要有新的代码,就会自动抓取。而后,提供一个运行环境,执行测试,完成构建,还能部署到服务器。api
持续集成指的是只要代码有变动,就自动运行构建和测试,反馈运行结果。确保符合预期之后,再将新代码"集成"到主干。浏览器
持续集成的好处在于,每次代码的小幅变动,就能看到运行结果,从而不断累积小的变动,而不是在开发周期结束时,一会儿合并一大块代码。安全
对于Travis.CI,有两个学习地址推荐阮一峰和廖雪峰服务器
断言库:框架