单元测试

定义:

  1. 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。

  2. 对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。

  3. 单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试

  4. 对于JavaScript来说,通常也是针对函数、对象和模块的测试

为什么要进行单元测试

  1. 尽责的单元测试方法将会在软件开发的某个阶段发现很多的Bug,并且修改它们的成本也很低。在软件开发的后期阶段,Bug的发现并修改将会变得更加困难,并要消耗大量的时间和开发费用。(越早越好)

  2. 无论什么时候作出修改都要进行完整的回归测试,在生命周期中尽早地对软件产品进行测试将使效率和质量得到最好的保证

  3. 开发人员可以将精力集中在单元之间的交互作用和全局的功能实现上,而不是陷入充满很多Bug的单元之中不能自拔。

基本概念

  • 测试管理工具(kama):
    1. 是用来组织和运行整个测试的工具
    2. 它能够将测试框架、断言库、测试浏览器、测试代码和被测试代码组织起来,并运行被测试代码进行测试
    3. 感觉用来运行和整理数据的
  • 测试框架
    1. 测试框架是单元测试的核心,它提供了单元测试所需的各种API,你可以使用它们来对你的代码进行单元测试。
  • 断言库
    1. 断言库提供了用于描述你的具体测试的API,有了它们你的测试代码便能简单直接,也更为语义化

Gammar

  • 描述
  1. 测试脚本里面应该包括一个或多个describe块,每个describe块应该包括一个或多个it块。
    describe块称为"测试套件"(test suite),表示一组相关的测试。它是一个函数,第一个参数是测试套件的名称("测试index.js"),第二个参数是一个实际执行的函数。

  2. it块称为"测试用例"(test case),表示一个单独的测试,是测试的最小单位。它也是一个函数,第一个参数是测试用例的名称("两数相加结果为两个数字的和"),第二个参数是一个实际执行的函数。

Enzyme usage

  • Enzyme

Shallow rendering is useful to constrain yourself to testing a component as a unit, and to ensure that your tests aren't indirectly asserting on behavior of child components.
As of Enzyme v3, the shallow API does call React lifecycle methods such as componentDidMount and componentDidUpdate

  • Mount

jsdom is a pure-JavaScript implementation of many web standards, notably the WHATWG DOM and HTML Standards, for use with Node.js. In general, the goal of the project is to emulate enough of a subset of a web browser to be useful for testing and scraping real-world web applications.

  • render

enzyme's render function is used to render react components to static HTML and analyze the resulting HTML structure.
render returns a wrapper very similar to the other renderers in enzyme, mount and shallow; however, render uses a third party HTML parsing and traversal library Cheerio. We believe that Cheerio handles parsing and traversing HTML extremely well, and duplicating this functionality ourselves would be a disservice.

断言库

  • reason
  1. 测试失败用抛异常来处理,多少有点繁琐,所以就有了断言库的出现
  2. 这就是对抛异常方法的一个封装,当判断失败时会抛出一个异常

Resource

. https://www.jianshu.com/p/6726c0410650 前端自动化单元测试初探
. http://airbnb.io/enzyme/ react的单元测试框架
. https://www.jianshu.com/p/6aae1e355f71 Enzyme 测试使用

你可能感兴趣的:(单元测试)