Web前端测试与集成:Jasmine/Selenium/Protractor/Jenkins的最佳实践
上QQ阅读APP看书,第一时间看更新

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单元测试报告