前端测试-学习笔记
1、相关术语
(1)测试框架
就是运行测试的工具。通过它,可以为JavaScript应用添加测试,从而保证代码的质量。
有Mocha、Jasmine、Karma等。
(2)测试脚本
就是用来测试源码的脚本。
通常,测试脚本与所要测试的源码脚本同名,但是后缀名为.test.js
(表示测试)或者.spec.js
(表示规格)。
测试脚本里面应该包括一个或多个describe
块,每个describe
块应该包括一个或多个it
块。
describe
块称为"测试套件"(test suite),表示一组相关的测试。它是一个函数,第一个参数是测试套件的名称("加法函数的测试"),第二个参数是一个实际执行的函数。
it
块称为"测试用例"(test case),表示一个单独的测试,是测试的最小单位。它也是一个函数,第一个参数是测试用例的名称("1 加 1 应该等于 2"),第二个参数是一个实际执行的函数。
(3)断言
就是判断源码的实际执行结果与预期结果是否一致,如果不一致就抛出一个错误。
所有的测试用例(it块)都应该含有一句或多句的断言。它是编写测试用例的关键。断言功能由断言库来实现,Mocha本身不带断言库,所以必须先引入断言库。
(3-1)断言库
例如断言库chai
(3-2)断言风格
例如expect
断言的优点是很接近自然语言。
基本上,expect
断言的写法都是一样的。头部是expect
方法,尾部是断言方法,比如equal
、a
/an
、ok
、match
等。两者之间使用to
或to.be
连接。
如果expect
断言不成立,就会抛出一个错误。事实上,只要不抛出错误,测试用例就算通过。
(4)运行
例如:
mocha
命令后面紧跟测试脚本的路径和文件名,可以指定多个测试脚本。
$ mocha file1 file2 file3
Mocha默认运行test
子目录里面的测试脚本。所以,一般都会把测试脚本放在test
目录里面,然后执行mocha
就不需要参数了。
Mocha默认只执行test
子目录下面第一层的测试用例,不会执行更下层的用例。
为了改变这种行为,就必须加上--recursive
参数,这时test
子目录下面所有的测试用例----不管在哪一层----都会执行。
2、ES6测试
如果测试脚本是用ES6写的,那么运行测试之前,需要先用Babel转码。
3、异步测试
例如 Mocha默认每个测试用例最多执行2000毫秒,如果到时没有得到结果,就报错。对于涉及异步操作的测试用例,这个时间往往是不够的,需要用-t
或--timeout
参数指定超时门槛。
4、测试用例的钩子
例如 Mocha在describe
块之中,提供测试用例的四个钩子:before()
、after()
、beforeEach()
和afterEach()
。它们会在指定时间执行。
5、浏览器测试
例如 mocha init
命令在指定目录生成初始化文件index.html