一. 单元测试的基本介绍:
1. 什么是单元测试:
- 单元测试即对一个模块、一个函数或者一个类来进行正确性校验的测试工作
2. 单元测试的意义:
- 可以确保一个程序模块的行为符合我们设计的测试用例。这样,即使将来对程序模块进行了修改、重构,只要测试用例能够通过,就能最大程度保证该程序模块是正确的
3. 单元测试的注意点:
- 对每一个单元进行测试时,需要写多个测试用例,这样才能保证测试结果的准确性
- 这要求在开发时,各个单元要尽量解耦,否则单元是不可测的
- 单元测试强调的是对程序逻辑的测试,而不是对业务逻辑的测试,例如:
- 测试某个函数的输出结果是否符合预期——
程序逻辑
,可以使用单元测试 - 检测某个表单的输入值是否符合规范——
业务逻辑
,不能使用单元测试
- 测试某个函数的输出结果是否符合预期——
二.单元测试的基本实现:
测试内容:测试求和函数
测试工具:Node.js的
assert
模块,该模块具体用法详见Node.js的官方文档
- 编写一个
hello.js
文件,输出一个简单的求和函数
// hello.jsmodule.exports = function(...rest) { var sum = 0; for(let n of rest) { sum += n; } return sum;}复制代码
- 编写一个
test.js
文件,使用assert
模块对该函数进行测试:
// test.jsconst assert = require('assert');const sum = require('./hello');assert.strictEqual(sum(), 0);assert.strictEqual(sum(1), 1);assert.strictEqual(sum(1, 2), 3);assert.strictEqual(sum(1, 2, 3), 6;复制代码
只要有一项测试没通过,断言就会失败,抛出错误
三.前端单元测试的工程化、自动化
上述案例为我们展示了如何实现一个简单的单元测试,但是有一个明显的缺陷就是:只要有一个
assert
报错,就会终止整个程序的执行,后面的测试也就无法测试了,这对于我们的实际项目而言显然是不够的,为此,要实现自动化的前端测试,需要借助一些开源框架。
1.单元测试框架——Mocha
Mocha
是基于Node.js的JavaScript测试框架,具有如下的一些特点:
- 兼容多种风格的断言库
- 测试用例可进行分组
- 同步兼异步的测试架构
- 提供多个生命周期钩子
2.测试框架驱动器——Karma
karma
是测试框架的驱动器,它为测试提供了多种测试环境,可运行单元测试框架(例如mocha
)在这些环境中进行测试,并生成测试报告
测试框架的驱动器 的理解:
- 如果只是使用
mocha
整个测试框架来进行开发测试,则每次开发完一个模块,就必须手动启动mocha
来进行测试,这就非常的麻烦- 使用
karma
,即可在开发时进行自动对新的代码进行测试,生成测试报告