作家
登录

React全家桶与前端单元测试艺术

作者: 来源: 2017-09-11 10:01:00 阅读 我要评论

TL;DR——什么是好的单位测试?

其实我是个标题党,单位测试根本没有“艺术”可言。

好的测试来自于好的代码,如不雅说有艺术,那也是代码的艺术。

注:以下“测试”一词,如非特指均为单位测试。

React全家桶与前端单位测试艺术

React全家桶与前端单位测试艺术

单位测试的好坏袈溱于“单位”而不在“测试”。如不雅一个体系毫无单位可言,那就没法进行单位测试,几乎只能用 Selenium 做大年夜量的E2E测试,其成本和稳定性可想而知。科学的单位划分可以让你摆脱mock,削减依附,进步并行度,不依附实现/易重构,进步测试对营业的覆盖率,以及易学易用,大年夜幅削减测试代码。

最好的单位是返回简单数据构造的函数:函数是最根本的抽象,可大年夜可小,不须要mock,只依附传参。简单数据构造可以判等。 最好的测试对象是Assert.Equal这种的:只是判等。判等轻易,断定产生了什么很难。你可以看到后面对于DOM和异步操作这些和副感化相干的例子都靠判等测试。把感化幂等于数据,拿到数据就必定产生感化,然后再测数据,是一个根本思路。

以上是你以前进修测试第一天就会的内容,所以不存在门槛。

组件测试 (View测试)

为什么不谈TDD?

起首, TDD 肯定是有价值的(价值大年夜小不论)。否决TDD的原因一般比脚绫趋显,对于TDD是否带来正收益不肯定(念头不足)。 某些项目质量请求很高,预算宽绰,TDD势在必行。某些项目比较紧急,或者并非关键或无经久保护筹划,TDD来由就不充分。

为什么谈测试?

因为测试难。

第一难学,第二难写。写测试是个挺艰苦的活,要在测试里精确重演营业要费好大年夜劲,只能靠反复演习。固然这些测试在某些项目中是值得的,然则可能并不合适其他某些项目标根本情况。

测试难,就代表练习成本高,临盆成本也高,收益就降低。要进步采取TDD的念头,与其说服别人,不如大年夜简化测试开端。


(图片来本身 http://t.cn/Rpw9WKg )

为什么谈前端测试?

结语

一般项目都是后端测试覆盖率高,同时后端套路也比较固定。测RESTful API粒度足够大年夜,可以很好地避开实现并且覆盖营业。同时RESTful API一般也正好对应Web框架的Action handler,在这里同时它粒度也足够小,刚好可以直接调用而不启动真的Web server,使得测试最大年夜程度并行化。所以如许测试收益老是最高的,争议很小。

前端不说套路不固定,测不测都有待商讨。因为前端流派不同一,资本不规矩,界线也不清楚,有衬着又有点营业,有导航有请求,很多团队不测试/测Model/测Component/测E2E,八门五花。 但得益于JavaScript本身,前端测试其实是可以异常高效的。

下面你可以看到各类极简极快的测试对象和测试方法,并且它们完全可以 贯穿开辟始终,而非仅给Hello World体量项目预备的 ,你可以在很大年夜的全家桶衔目中完全机械地套用这些办法。(机械也是极限的一部分,你不该该在应用对象过程中面对太多决定,而应当专注于将营业翻译成测试)。

为什么谈React全家桶?

前端大年夜每周刷新一?框架,稳定到了 Angular , React , Vue 3个主流框架并存的阶段。收集中争辩这三个框架盖的楼已经可以绕太阳系了。根据盖的各类大年夜楼看来,如今哪个更优良还没个定论。不过具体到单位测试方面,得益于Virtual DOM本身和模块化设计(不然全家桶白叫了),React全家桶明显更优良些。

测试对象

这是个最通俗的API处理saga,一个account worker看到每个’login/REQUESTED’就会forward给login worker(takeEvery),让它持续管下面的事。然后login worker拿到消息就会去发请求(call),之后傻傻地等着答复,或者是掉足。最后它会发出和结不雅相干的事宜。用这个方法你可以轻松解决猖狂难度的异步问题。

我们本篇中的测试有三个目标: 学得快,写得快,跑得快 。

React全家桶与前端单位测试艺术
(图片来本身 http://t.cn/RpwCke3 )

平台上 Selenium , Phantom , Chrome , 包含 Karma 都比较重,最好的测试框架就是直接跑在 node 上的。本着极限编程的原则,我们将测试本身和测试情况尽可能简化,以达到加快测试速度,最终反馈到开辟速度的目标。

  1. yarn add ava 
  2. ava --watch 

如许可以运行并watch测试。改变代码测试结不雅会急速改变,你也可以看到友善的缺点信息,以及expected和actual之间的diff。写下第一段测试:

  1. import test from 'ava' 
  2.  
  3. test(t => { 
  4.   t.is(1 + 1, 2) 
     1/6    1 2 3 4 5 6 下一页 尾页

      推荐阅读

      iOS中关于列表滚动流畅的一些探讨

    如不雅说有什么好的博客文┞仿推荐,ibireme 的 iOS 保持界面流畅的技能 这篇堪称业界毒瘤,墙裂推荐反复浏览。这篇文┞仿中讲解了很多的优化点,我本身总结了下收益最大年夜的两个优化点>>>详细阅读


    本文标题:React全家桶与前端单元测试艺术

    地址:http://www.17bianji.com/lsqh/37291.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)