Jest测试框架、JSDoc学习

极客漫步人
• 阅读 983

Jest测试框架、JSDoc学习

一、单元测试

1、什么是单元测试

    单元测试就是为检测特定的目标是否符合标准而采用专用的工具或者方法进行验证,并最终得出特定的结果,这里所说的特定目标就是我们编写的代码。

2、单元测试的好处

    单元测试可以减少bug,提升代码可读性可维护性,为系统重构做铺垫,减少我们之后的工作量。

二、Jest

1、什么是Jest

    Jest是Facebook开发的集成了测试执行器、断言库、spy、mock、snapshot和测试覆盖率报告等功能的一个测试框架。

2、Jest相较于其他测试框架的优势

    Jest开箱即用,无需多余配置,API简单,上手成本低,安全性高。

三、Jest学习

1、安装Jest

    首先创建一个名为Jest-demo的工程,在终端输入npm install --save-dev jest并运行进行Jest框架的安装。

Jest测试框架、JSDoc学习

2、编写业务逻辑代码

    创建一个js文件,用来编写需要测试的功能代码,如下图,编写了一个加法的sum方法,再用module.exports将此方法变成全局的方法。

Jest测试框架、JSDoc学习

3、编写单元测试代码

    创建一个.test.js文件,用来测试上面的sum方法,通过require引入sum方法,进行测试。

Jest测试框架、JSDoc学习

4、运行单元测试

    在package.json配置文件中增加test命令,之后在终端输入npm test就可以进行测试了。

Jest测试框架、JSDoc学习

    下面就是测试成功返回的结果:

Jest测试框架、JSDoc学习

    那如果我们把业务逻辑代码修改成错误的之后会返回什么样的结果呢?

Jest测试框架、JSDoc学习

    下面是测试失败返回的结果:

Jest测试框架、JSDoc学习

    如图,它会告诉我们期望接收到的值和实际接收到的值,这样就有助于我们去寻找错误。

注:测试代码中的toBe就是Jest框架的一个匹配器,toBe就相当于" === ",Jest框架还有许多其他的匹配器,如:toEqual,toBeNull,toBeUndefined,toBeDefined,toBeTruthy,toBeFalsy,在匹配器前面加上not.就是取反,toBeGreaterThan,toBeLessThan,toBeGreaterThanOrEqual,toBeLessThanOrEqual,toBeCloseTo,toMatch,toContain,toThrow等。

5、测试异步代码

    异步操作成功需要在匹配器前面加上.resolves,如下图:

Jest测试框架、JSDoc学习
Jest测试框架、JSDoc学习

    异步操作失败报错需要在匹配器前面加上.rejects,如下图:

Jest测试框架、JSDoc学习
Jest测试框架、JSDoc学习

6、Jest的四个钩子

    Jest提供了四个钩子,分别是beforeEach、afterEach、beforeAll、afterAll。当想要在每个test前后都做同一件事情时,就用beforeEach和afterEach;想要在全部的test前后做同一件事情时,则用beforeAll和afterEach.

Jest测试框架、JSDoc学习

    运行结果如下图:

Jest测试框架、JSDoc学习

    可以用describe关键字对test分组:
    注:1、放在describe内部的钩子仅对当前分组生效;2、当有多个describe时,会先执行所有的describe,再执行所有的test。

Jest测试框架、JSDoc学习

    运行结果如下图:

Jest测试框架、JSDoc学习Jest测试框架、JSDoc学习

7、jest.fn()

    jest.fn() 用于创建一个函数,我们可以设置该函数的返回值、监听该函数的调用、改变函数的内部实现等等,我们通过 jest.fn() 创建的函数有一个特殊的 .mock 属性,该属性保存了每一次调用情况,如下图:

Jest测试框架、JSDoc学习

    执行结果如下图:

Jest测试框架、JSDoc学习Jest测试框架、JSDoc学习

7、jest.mock()

    jest.mock用于模拟整个外部模块,可以使用它来监视对类构造函数及其所有方法的调用。

Jest测试框架、JSDoc学习

    测试通过结果如下图:

Jest测试框架、JSDoc学习

8、jest.mock()

    Jest.spyOn()方法同样创建一个mock函数,但是该mock函数不仅能够捕获函数的调用情况,还可以正常的执行被spy的函数。实际上,jest.spyOn()是jest.fn()的语法糖,它创建了一个和被spy的函数具有相同内部代码的mock函数。

Jest测试框架、JSDoc学习

    测试通过结果如下图:

Jest测试框架、JSDoc学习

三、JSDoc学习

1、什么是JSDoc

    JSDoc 是一个用于 JavaScript 的 API 文档生成器,类似于 Javadoc 或 phpDocumentor。可以将文档注释直接添加到源代码中,就在代码本身旁边。 JSDoc 工具将扫描源代码并生成 HTML 文档。

注:JSDoc能够识别的注释必须要以/**开头。

2、JSDoc安装和配置

    首先创建一个jsdoc-demo工程文件夹,然后在终端输入 npm init -y 生成package.json文件,之后输入 npm i -D jsdoc 安装JSDoc工具,安装完成后,在根目录下创建jsdoc的配置文件对jsdoc进行配置,最后在package.json中添加jsdoc的执行脚本。

3、JSDoc使用

    创建一个函数,在函数上边用/**可以创建函数相关注释。

Jest测试框架、JSDoc学习

    在终端输入npm run doc可以生成注释的HTML文档,HTML文档保存在jsdoc配置文件中设定的文件夹下。

Jest测试框架、JSDoc学习

    HTML文档如下图:

Jest测试框架、JSDoc学习
注:类似@param这样@开头的就是jsdoc的标签,还有更多的jsdoc标签,如:@constructor,@typedef,@property,@return等,可以使用jsdoc标签来为注释添加更多信息。

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java单元测试
Java单元测试1.概述java单元测试是最小的功能单元测试代码,单元测试就是针对单个java方法的测试。java程序的最小功能单元是方法。main方法进行测试的缺点:只能有一个main()方法,不能把测试代码分离出来无法打印出测试结果和期望结果.例如:expected:
Stella981 Stella981
3年前
OpenStack基础知识
针对以前学的内容的一个简单整理1、单元测试工具介绍unittest:是Python的标准库,提供了最基本的单元测试功能,包括单元测试运行器(简称runner)和单元测试框架。项目的单元测试代码的测试类可以继承unittest.TestCase类,那么这个类就能够被runner发现并且执行。同时,unittest.TestCase
Stella981 Stella981
3年前
Mock工具之Mockito实战
在实际项目中写单元测试的过程中我们会发现需要测试的类有很多依赖,这些依赖项又会有依赖,导致在单元测试代码里几乎无法完成构建,尤其是当依赖项尚未构建完成时会导致单元测试无法进行。为了解决这类问题我们引入了Mock的概念,简单的说就是模拟这些需要构建的类或者资源,提供给需要测试的对象使用。业内的Mock工具有很多,也已经很成熟了,这里我们将直接使用最流行的Moc
Wesley13 Wesley13
3年前
C# 单元测试(入门)
注:本文示例环境VS2017XUnit2.2.0单元测试框架xunit.runner.visualstudio2.2.0测试运行工具Moq4.7.10模拟框架什么是单元测试?确保软件应用程序按作者的期望执行操作,其中最好的一种方法是拥有自动化测试套件。可以对软件应用程序进行各种不同的测试,
Wesley13 Wesley13
3年前
Python单元测试框架unittest简介
Python单元测试框架,其中的有些部分参照PyUnit。PyUnit是JUnit的python语言版本,它是由KentBeck和ErichGamma创建。JUnit是Kent的Smalltalk测试框架的Java版本。JUnit的每部分都是标准的单元测试框架,很多语言都受他启发而开发自身的单元测试框架。        unittest支持自动化测
Wesley13 Wesley13
3年前
Jacoco在eclipse上的集成使用
随着敏捷开发的流行,编写单元测试已经成为业界共识。但如何来衡量单元测试的质量呢?有些管理者片面追求单元测试的数量,导致底下的开发人员投机取巧,编写出大量的重复测试,数量上去了,质量却依然原地踏步。相比单纯追求单元测试的数量,分析单元测试的代码覆盖率是一种更为可行的方式。JaCoCo(JavaCodeCoverage)就是一种分析单元测试覆盖率的工具,使
Stella981 Stella981
3年前
BeanMock的使用介绍与说明
使用场景Mockito是java单元测试很常用的一个工具。但是在classAclassBclassC的场景中,假如需要对classA进行单元测试,需要针对ClassC的方法返回不同结果进行验证,而又不希望对classB进行mock。这个时候一般的解决方案有两种:1、使用反射的层层调用(但是对于更深层的调用会显得很繁琐,并
Stella981 Stella981
3年前
SpringBoot(20)
  我们在写单元测试的时候,除了接口直接抛异常而导致该单元测试失败外,还有种是业务上的错误也代表着该单元测试失败。好比我们在测试接口的时候,  该接口返回是1代表成功,如果是0那就代表是失败的,这个时候可以考虑使用断言。  一、原理我们知道,我们可以通过断言来校验测试用例的返回值和实际期望值进行比较,以此来判断测试是否通过。那我们先来看下如果失败的情
Stella981 Stella981
3年前
OAuth 2.0 单元测试解决方案
为什么需要单元测试单元测试拥有保证代码质量、尽早发现软件Bug、简化调试过程、促进变化并简化集成、使流程更灵活等优势。单元测试是针对代码单元的独立测试,核心是“独立”,优势来源也是这种独立性,而所面临的不足也正是因为其独立性:既然是“独立”,就难以测试与其他代码和依赖环境的相互关系。单元测试与系统测试是互补而非代替关系。单元测试的优
Java单元测试及常用语句 | 京东物流技术团队
编写Java单元测试用例,即把一段复杂的代码拆解成一系列简单的单元测试用例,并且无需启动服务,在短时间内测试代码中的处理逻辑。写好Java单元测试用例,其实就是把“复杂问题简单化,建单问题深入化“。在编写的过程中,我们也可以对自己的代码进行一个二次检查。