测试随笔

作为一个开发者,相信你或多或少都会接触过测试,小到”单元测试“,大到”特性测试“,团队人少的开发自己测试,团队人多的专门招个人测试,甚至是有自己专门的测试团队、测试部门。

当我们从简简单单的关注功能到了关注代码质量、关注产品性能、关注软件工程的时候,我们就不可避免的要与测试打交道,可是,你又是否真正关注过测试?

在我看来,测试真正的价值是将软件工程中的一些变量,变成了不变的量。对于一个项目来说,变量越多,我们要处理的问题就越复杂。而测试可以确保我们需要的东西从变量,转变为常量。当他成为常量时,我们在后续的处理相对就更加简单了。

如果用线性代数的话来说,测试其实就是将维度降低了,你每写下一个测试,都将代表着你的软件复杂度的维度降低一维,你解决问题的难度也就越低。

在一个老旧的项目里引入 Mocha 测试

由于要做每日极漫小程序,也就需要其背后的漫画翻译组活跃起来,随之,就需要翻译组背后的工具正常使用,不过 LCTC-CLI 已经很久没有更新了,便趁这个机会,恢复这个工具的更新。

对工具的更新, 首先应当做的,自然是补全测试,这样才好确保自己的改动不至于让老项目无法正常运转。

安装 Mocha

首先,执行命令,将 Mocha 安装在开发依赖中。

npm install --save-dev mocha

随后,再修改 package.json 文件中的 scripts 部分的内容,将 test 对应的命令改为 mocha,效果如下

{
   ...
   "scripts": {
       "test": "mocha"
   }
   ...
}

这样,你就可以运行 npm test 来执行测试了。

编写测试

安装完成后,你可以运行npm test 命令,来执行测试,这时,你会发现报错如下:

Warning: Could not find any test files matching pattern: test
No test files found

这是因为你并没有创建测试文件夹和测试文件,所以自然会报错。

执行如下命令,来创建一个测试目录和对应的测试文件

mkdir test
touch test/test.js

再次执行,你就可以看到,测试成功通过。

0 passing (3ms)

虽然是告诉你,你并没有通过任何的测试代码(所以是 0 passing)

接下来,编写第一个测试,打开 test/test.js,然后填入下述代码

var assert = require('assert');
describe('Array', function() {
  describe('#indexOf()', function() {
    it('should return -1 when the value is not present', function() {
      assert.equal([1,2,3].indexOf(4), -1);
    });
  });
});

然后,再次执行 npm test ,这样,就完成了第一个测试,你会看到这样的输出

Array
#indexOf()
✓ should return -1 when the value is not present
1 passing (7ms)

这样,就完成了初步的 Mocha 的引入和测试。接下来,开始继续编写实际的测试即可。

不过,我在编写测试时发现,原先的代码结构极为不合理,因此,决定直接重写了。使用 TDD 的思想,完成重写这个工具。