Oasis's Cloud

一个人的首要责任,就是要有雄心。雄心是一种高尚的激情,它可以采取多种合理的形式。
—— 《一个数学家的辩白》

单元测试

作者:oasis


单元测试工具要做的事情

  • 查找项目中的包含测试代码的文件
  • 在找到的文件中查找测试用例
  • 运行测试
  • 捕获运行结果
  • 生成运行报告

如何构建单元测试

  • 一个无参数的 test 函数,这样我们可以统一运行,无需增加特殊逻辑
  • 每个 test 函数创建一个用于测试的模板过程,通过断言将实际结果和预期结果进行比较,比较结果分为三种情况
    • 通过
    • 失败
    • error,测试用例本身存在错误
  • 如何区分 失败 和 error ?
    • 可以通过 Error 的类型累处理,我们可以给 失败指定一个特殊类型,非此类型的视作测试用例本身存在错误。

命令行的 test 库,首先要扫描包含测试用例的文件,然后通过动态导入,例如 import(f) 方式。

js

const main = async(args) => {
    const filenames  = glob.sync('**/test-*.js')
    for(const f of filenames) {
        await import(f)
    }
}

现在很多项目都是用 typescript 编写的,所以在需要将代码进行编译,编译到普通的 js 。

PS: 除了上面代码中的动态导入,在低版本上,可以生成一个 JS 文件,包含那些测试用例,例如生成的结果如下:

js
// generated.js
require('./test-a.js')
require('./test-b.js')
require('./test-c.js')
...