我创建了一个用于随手发的 TG Channel

a231b221c8f6ebab63d067de85e3d4c5

先上链接: https://t.me/+azWuudfqVsM5MDQ1

这个 Channel 是一个我用来阅读的时候,随手发一些信息到里面的 Channel。他会包含了我觉得「有意思的别人的话」,如果你对于我在看什么感兴趣,那么这个 Channel 会是你需要的。

作为一个表达欲很强的人来说,我其实有着非常强的诉求有个渠道去发一些东西,但现有的很多平台发这些零碎的东西会让别人感受到不好,所以我能做的便是创建一个隐私的 Channle 来发布,这样就不用担心对别人的影响了。

少楠曾邀请我在小报童上开一个专栏来分享,不过我一直觉得,我自己能分享的信息过于碎片,担心难以让读者们满意,所以决定还是放弃开专栏的机会,更多是向内求, 不去做更公开的分享,而是做一些更加小众、更加舒适的分享。这个 Channel 就是我的一个尝试。

Jest 如何将复杂的判断条件中的具体问题暴露出来?

code 1076536 640

在写测试的时候,如果你需要对大量的数据进行 compare 处理的时候,你大概率不会把所有需要对比的对象都列出来,而是选择直接循环处理。

在测试中如果有循环处理的时候,很有可能会出现的一个问题是你可能无法在测试无法通过时快速定位道具体是循环中的哪一个元素出现的问题。这个时候的定位就会比较麻烦。

一个比较好的办法是,可以在 Jest 中加入 try/catch 中来处理错误,这样可以在出现错误的时候,打印一些辅助信息来快速定位,比如

it('test-error-catch-example',() => {

   let needTestData = [1,2,3,4]

   needTestData.foreach( item => {
       let result = doSomething(item)
       // 这里开始是新增的
       try{
          expect(result).toBe(true)
       }catch(e){
          console.log("error key",item)
          throw e;
       }
       // 新增的错误处理结束
   })

})
Code language: JavaScript (javascript)

通过添加一个自定义的 try catch ,可以在出现问题的时候,一方面将 Error 按照常规的方式抛出,等待 Jest 处理,另一方面,可以在 catch 时输出自定义的信息,方便我们进行排查和修复。

测试随笔

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

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

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

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

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

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

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

安装 Mocha

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

npm install --save-dev mocha

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

{
   ...
   "scripts": {
       "test": "mocha"
   }
   ...
}
Code language: JavaScript (javascript)

这样,你就可以运行 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);
    });
  });
});
Code language: JavaScript (javascript)

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

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

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

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