纯前端写单元测试该如何下手
发布于 7 年前 作者 yunkou 12390 次浏览 最后一次编辑是 6 年前 来自 问答

RT 昨天拜读了,狼叔的AVA的文章。在思考一个问题,纯前端写单元测试该如何入手?

10 回复

狼叔是谁?

一、掌握工具 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够用了。

回到顶部