8.2.2 单元测试代码组织
您可以在百度里搜索“深入浅出React和Redux 艾草文学(www.321553.xyz)”查找最新章节!
8.2.2 单元测试代码组织
单元测试代码的最小单位是测试用例(test case),每一个测试用例考验的是被测试对象在某一个特定场景下是否有正确的行为。在Jest框架下,每个测试用例用一个it函数代表,it函数的第一个参数是一个字符串,代表的就是测试用例名称,第二参数是一个函数,包含的就是实际的测试用例过程。
一个很简单的单元测试用例代码如下:
it('should return object when invoked', () => {
//增加断言语句
});
测试用例用it函数代表,这个函数名it指代的“它”就是被测对象,所以第一个参数的用例名称就应该描述“它”的预期行为,比较好的测试用例名遵循这样的模式:“(它)在什么样的情况下是什么行为”,应该尽量在it函数的第一个参数中使用这样有意义的字符串。
为了测试被测对象在多种情况下的行为,就需要创建多个单元测试用例,因此,接下来的问题就是如何组织多个it函数实例,也就是测试套件(test suite)的构建。
一个测试套件由测试用例和其他测试套件构成,很明显,测试套件可以嵌套使用,于是测试套件和测试用例形成了一个树形的组织结构。当执行某个测试套件的时候,按照从上到下从外到里的顺序执行所有测试用例。
在Jest中用describe函数描述测试套件,一个测试套件的代码例子如下:
describe('actions', () => {
it('should return object when invoked', () => {
});
//可以有更多的it函数调用
});
describe函数包含与it函数一样的参数,两者主要的区别就是describe可以包含it或者另一个describe函数调用,但是it却不能。
将多个it放到一个describe中的主要目的是为了重用共同的环境设置。比如一组it中都需要创建一个Redux Store实例作为测试的前提条件,让每个it中都进行这个操作就是重复代码,这时就应该把这些it放在一个describe中,然后利用describe下的beforeEach函数来执行共同的创建Redux Store工作。
describe中有如下特殊函数可以帮助重用代码。
·beforeAll,在开始测试套件开始之前执行一次;
·afterAll,在结束测试套件中所有测试用例之后执行一次;
·beforeEach,每个测试用例在执行之前都执行一次;
·afterEach,每个测试用例在执行之后都执行一次。
假设一个descibe中包含上面所描述的四个函数,并包含两个it测试用例,那么首先执行beforeAll函数,随后执行beforeEach函数,接下来执行第一个it函数,接着执行afterEach函数,接下来,又是依次执行beforeEach、it和afterEach函数,最后执行的是afterAll函数。
提示
本书中基于Jest构建单元测试代码,但是如果使用Mocha,会发现代码很相似,一样也是使用describe和it来代表测试套件和测试用例,一样利用beforeEach和beforeEnd执行通用的代码。但是Mocha没有beforeAll和afterAll,取而代之的是before和after函数,这是两个测试框架的微小区别。 深入浅出React和Redux