RT 昨天拜读了,狼叔的AVA的文章。在思考一个问题,纯前端写单元测试该如何入手?
狼叔是谁?
一、掌握工具 1、掌握一个断言库 should、 chai等,用于验证结果是否符合预期。 2、熟悉一个测试框架,mocha、Jasmine等,用来统计测试的执行情况。 3、掌握如何用karma连接真实的浏览器跑测试。能够用一些测试覆盖率统计的工具统计一下覆盖率;或是能够加入持续集成,提交代码后自动跑测试用例。
二、划分可供测试的粒度。 1、测试说白了就是假设一个输入,然后断言它的输出。一个“混沌”的东西是非常难模拟输入并检查输出的,所以代码需要非常好的模块化,组件化才容易测试。 2、和后端相比,前端可能并不是那么的“纯粹”,涉及到的东西非常多,所以在单元测试这块一直都不怎重视。针对面向领域的应用编写特别详细的单元测试我感觉不是特别现实,但有几个粒度的测试我觉得是可以做的。一是函数级别的,就是一些公用函数或模块的方法;二是组件级别的,一些基础的小组件,有一些UI逻辑,但和具体的业务逻辑无关;三是和UI无耦合的业务逻辑,就是数据增删改查一类的东西,类似Redux里的reducer。
AVA的确比较新潮,但目前还不能跑在前端。建议用tape+karma+selenium。如果是开源项目的话可以考虑tape+zuul+saucelabs。mocha也可以,但是mocha的问题是写的测试只能跑在task runner里,不能直接执行。tape的优点是可以直接执行,另外也比较简单。
@andyhu 说清楚,为啥ava不能跑在前端?
@i5ting 啊哈哈,活捉狼叔
@vinnyguitar 谢谢,这些有个思路,就是把项目中的共用逻辑抽出来,写成npm包发布,然后在多项目中使用,把这一类写单测 谢谢。
@i5ting 就是你,因为很像“金刚狼”,西西
@i5ting 这个我也不是特别的清楚,只是看官方描述ava目前只能用jsdom这种东西模拟前端的测试,还不能原生跑在浏览器里。大概原因是ava 大量采用了一些es6的特性以及有一些语法浏览器不支持,另外并发并行的测试浏览器不支持。有一个这方面的issue可以看下,目前是low priority https://github.com/avajs/ava/issues/24
@i5ting 有什么能让ava跑在前端的办法吗?我自己是没测试。不过感觉tape够用了。
@vinnyguitar 再次感谢 今天看到 https://github.com/alsotang/node-lessons/tree/master/lesson7 有很好的介绍