4.3 创建单元测试
前面解释了如何使用Jasmine组织测试用例,现在开始创建第1个单元测试项目。
4.3.1 准备测试场景
准备测试场景的步骤如下。
(1)创建一个目录jasmine-demo,在命令控制台里将当前目录切换到jasmine-demo。
(2)运行npm init命令生成package.json文件。(-y参数表示不进行交互,直接使用默认设置)
C:\jasmine-demo>npm init -y
(3)为了方便管理,这里使用npm install下载Jasmine的核心类库。Jasmine核心类库会被下载到node_modules子目录。
C:\jasmine-demo>npm install jasmine-core --save-dev
(4)创建src和spec子目录。src子目录用于存放被测代码,spec目录用于保存测试用例代码。
(5)在src和spec目录下分别创建Basic子目录,用来保存第一个单元测试示例的被测代码和测试用例。此时目录结构如下:
- jasmine-demo +-- node_modules | +-- jasmine-core +-- src | +-- Basic +-- spec | +-- Basic
(6)在jasmine-demo\src\Basic目录下创建Calc.js,该文件中是被测的JavaScript代码:
/* Calc.js */ var Calculator = function() {}; Calculator.prototype.add = function(a, b) { return a + b; };
4.3.2 编写测试用例
编写单元测试用例一般遵循如下三个步骤的AAA模式。
(1)Arrange(准备)。设置测试场景,准备测试数据。
(2)Act(执行)。调用被测试代码。
(3)Assert(断言)。验证被测代码的行为是否与预期相同。
在jasmine-demo\spec\Basic目录下创建Calc_spec.js,添加如下测试代码:
/* Calc_spec.js */ describe('Calculator', function () { var calc; beforeAll(function () { //Arrange calc = new Calculator(); }); describe('Test Add', function () { it('add 1 and 3 should equal 4', function () { //Act var result = calc.add(1,3); //Assert expect(result).toBe(4); }); }); });
以上测试代码里有一句断言:
expect(result).toBe(4);
单元测试验证测试结果通常采用断言(assertion)的形式,也就是测试某个功能的返回结果,是否与预期结果一致。如果与预期不一致,就表示测试失败。以上这个断言的意思是调用add(1,3)的结果应该是4。
所有的测试用例(it块)都应该包含有一句或多句的断言,它是编写测试用例的关键。
4.3.3 执行测试
为了执行测试用例,在jasmine-demo\spec\Basic目录下创建测试执行页面SpecRunner. html(参考独立分发包里的SpecRunner.html),内容如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Calculator Test</title> <link rel="shortcut icon" type="image/png" href="../../node_modules/jasmine-core/ images/jasmine_favicon.png"> <link rel="stylesheet" href="../../node_modules/jasmine-core/lib/jasmine-core/ jasmine.css"> <script src="../../node_modules/jasmine-core/lib/jasmine-core/jasmine.js"></script> <script src="../../node_modules/jasmine-core/lib/jasmine-core/jasmine-html.js"> </script> <script src="../../node_modules/jasmine-core/lib/jasmine-core/boot.js"></script> <! -- include source files here... → <script src="../../src/Basic/Calc.js"></script> <! -- include spec files here... → <script src="Calc_spec.js"></script> </head> <body> </body> </html>
测试执行页面引用了node_modules目录下的Jasmine核心类库,被测代码Calc.js以及测试用例代码Calc_spec.js。
双击该页面,默认浏览器执行测试代码并输出测试报告,如图4-9所示。
图4-9 Calculator单元测试报告