金沙棋牌官方平台

当前位置:金沙棋牌 > 金沙棋牌官方平台 > 前端自动化单元测试,组件进行单元测试

前端自动化单元测试,组件进行单元测试

来源:http://www.logblo.com 作者:金沙棋牌 时间:2019-11-22 11:08

多一些组件的单元测试,少一些集成测试

Enzyme 可以帮助我们实现组件的单元测试和集成测试。这里我们可以通过三种方式来渲染组件:

  • shallow()
  • mount()
  • render()

shallow() 只能用来渲染不包含 children 的组件,mount() 则能够渲染所有的子组件。所以单元测试的时候可以使用 shallow()mount() 则一般用于集成测试。集成测试往往是很容易被割裂的,因为他需要测试由一组或是多个组件树组合的场景,所以集成测试一般维护成本是比较高的。所以我们可以多做一些小巧的单元测试,少做一些重要的集成测试。

第三种测试的方式是使用 render() 方法,具有类似 mount()方法的功能,不过 mount() 能够访问到组件的生命周期方法,比如 componentDidUpdate等。

正如这个 issue 中提出的 API differences between render and mount/shallow,可以总结出:

  • 使用 shallow 开始测试用例
  • 如果 componentDidMount or componentDidUpdate 等方法也需要测试,那么使用 mount 方法吧
  • 如果要测试组件生命周期方法、子组件的行为等,使用 mount 方法吧
  • 如果想更高性能的测试子组件,并且对组件的生命周期等方法不怎么关注,那么使用 render 方法吧

stub

有时候会使用stub来嵌入或者直接替换掉一些代码,来达到隔离的目的

一个stub可以使用最少的依赖方法来模拟该单元测试。比如一个方法可能依赖另一个方法的执行,而后者对我们来说是透明的。好的做法是使用stub 对它进行隔离替换。这样就实现了更准确的单元测试。

var myObj = { prop: function() { return 'foo'; }};sinon.stub(myObj, 'prop').callsFake(function() { return 'bar';});myObj.prop(); // 'bar'

6、方式 (How)——如何

TDD

TDD是Test Driven Development 的缩写,也就是测试驱动开发。

通常传统软件工程将测试描述为软件生命周期的一个环节,并且是在编码之后。但敏捷开发大师Kent Beck在2003年出版了 Test Driven Development By Example 一书,从而确立了测试驱动开发这个领域。

TDD需要遵循如下规则:

  • 写一个单元测试去描述程序的一个方面。
  • 运行它应该会失败,因为程序还缺少这个特性。
  • 为这个程序添加一些尽可能简单的代码保证测试通过。
  • 重构这部分代码,直到代码没有重复、代码责任清晰并且结构简单。
  • 持续重复这样做,积累代码。

TDD具有很强的目的性,在直接结果的指导下开发生产代码,然后不断围绕这个目标去改进代码,其优势是高效和去冗余的。所以其特点应该是由需求得出测试,由测试代码得出生产代码。打个比方就像是自行车的两个轮子,虽然都是在向同一个方向转动,但是后轮是施力的,带动车子向前,而前轮是受力的,被向前的车子带动而转。

金沙棋牌官方平台 1关于测试的一些学习建议

我们可以组合使用一些测试工具来帮助测试 JS 代码,一般使用 Mocha/Chai 或是 Karma/Jasmine 。而如果当你想测试 angular 的代码时,你会发现还有更多的测试工具。不过对于 React 应用的测试,比较推荐使用 Airbnb 团队出品的 anzyme 来进行组件的测试,以保住组件的稳定可靠,目前使用非常广泛;而另一种方式是使用 Facebook 的 jest 来进行测试。

可能很多同学都觉得应该选择以上的某一个测试库来进行测试工作,不过,你也可以将 anzymejest 结合起来一起使用。特别是在进行一些 snapshot 快照测试的时候,两种都是互补的,它们已经是 React 应用测试中大家公认的标准库了。

sinon 也是个非常优秀的测试辅助工具,可以帮助我们在 spy、stub、mock 等测试阶段提供相应的工具辅助测试。如果对这几个概念不太清晰,可以看看这里。

另外,在这里给你隆重的给你推荐一篇 A. Sharif 写的 Some Thoughts On Testing React/Redux Applications,满满的干货分享哦。

解读测试覆盖率

金沙棋牌官方平台 2

这就是 jest 内置的 istanbul 输出的覆盖率结果。

之所以叫做“伊斯坦布尔”,是因为土耳其地毯世界闻名,而地毯是用来"覆盖"的

本文由金沙棋牌发布于金沙棋牌官方平台,转载请注明出处:前端自动化单元测试,组件进行单元测试

关键词: