背景:
这段时间在学习lodash源码,以提升自己的函数编程水平。从github上下载源码之后,发现人家的源码 每个函数都有一个对应的test.js文件。而我写一个函数 就需要不断的通过script标签导入到一个html文件中,然后在浏览器环境中验证。步骤非常繁琐,而且一点也没有技术含量。所以 查资料学习了一些关于单元测试的知识。
单元测试必要性
这里要说一下我学lodash的步骤,我是先去官网查看函数定义,根据这个函数的作用定义,自己先写代码实现一遍,然后再对照源码,分析差距。所以我很符合测试驱动的场景。所以需要引入单元测试。
理想状况是 我看完函数定义,就将测试用例写好,然后写好测试文件,在开始编写自己的函数。
测试基本概念
测试分为两类:单元测试(unitTest) 和端到端测试(e2e)。单元测试以函数为一个单元,假定好入参和出参 。测试函数是否正常执行。常见于开发自测。
端到端测试 是功能性的测试,通过执行点一个按钮,输入一些数据 等动作,看是否达到预期的效果。一般来说 测试人员用的比较多。
单元测试常用的工具: 测试框架+断言库
断言库:
断言库有很多种 常见的有assert,chai。我只用了assert,因为node自带。它其实就是一些判断条件,满足条件认为true。否则是false。
断言和if判断的区别是 断言识别非法情况,if判断错误情况。断言为false会自动中断程序。if如果是false的话 理论上来说 还是要写一些处理逻辑的。
如果单独使用断言库 需要将断言语句写在要测试的函数内部。 这样函数会很长。不好。如果函数需要发布到生产环境 还需要加上 #defin NOEBUE 来禁用断言。
测试框架:
测试框架就更多了,mocha, Karma等。
因为断言库的不方便单独使用,所以一般来说,我们都是配合着测试框架一起使用的。有的测试框架是自带断言库的,也可以单独使用一个测试框架 配合着自己导入的断言库。
导入测试框架的话 就需要一个工程了,不能在一个js文件里瞎搞了。
需要建立一个node项目 运行 npm init 可以快速获取一个node项目。 建好项目引入测试框架后,就可以用命令行 在node环境中 测试了。