Jest Tutorial for Beginners: Getting Started With JavaScript Testing

Jest 是一个 JavaScript 测试运行器,即用于创建、运行和构建测试的 JavaScript 库。

Jest 作为 NPM 包发布,您可以将其安装在任何 JavaScript 项目中。 Jest 是当今最流行的测试运行器之一,也是 React 项目的默认选择。

Setting up the project

与每个 JavaScript 项目一样,您需要一个 NPM 环境(确保在您的系统上安装了 Node)。 创建一个新文件夹并使用以下命令初始化项目:

mkdir getting-started-with-jest && cd $_
npm init -y

接着:

npm i jest --save-dev

让我们也配置一个 NPM 脚本来从命令行运行我们的测试。 打开 package.json 并配置一个名为 test 的脚本来运行 Jest:

"scripts": {"test": "jest"},

Specifications and test-driven development

作为开发人员,我们都喜欢创意自由。 但是,在大多数情况下,当涉及到严肃的事情时,您没有那么多特权。

我们必须遵循规范,即对要构建的内容的书面或口头描述。

在本教程中,我们从项目经理那里得到了一个相当简单的规范。 一个超级重要的客户端需要一个 JavaScript 函数来过滤一个对象数组。

对于每个对象,我们必须检查一个名为“url”的属性,如果该属性的值与给定的术语匹配,那么我们应该在结果数组中包含匹配的对象。

作为一名精通测试的 JavaScript 开发人员,您希望遵循测试驱动开发,这是一种在开始编码之前强制编写失败测试的学科。

默认情况下,Jest 希望在您的项目文件夹中名为 tests 的文件夹中找到测试文件。 创建新文件夹:

mkdir tests

接下来在 tests 中创建一个名为 filterByTerm.spec.js 的新文件。 您可能想知道为什么扩展名包含 .spec。这是从 Ruby 借用的约定,用于将文件标记为给定功能的规范。

Test structure, and a first failing test

describe("Filter function", () => {// test stuff
});

我们的第一个朋友是 describe,一个包含一个或多个相关测试的 Jest 方法。 每次你开始为一个功能编写一套新的测试时,都将它包装在一个 describe 块中。 如您所见,它需要两个参数:一个用于描述测试套件的字符串,以及一个用于包装实际测试的回调函数。

接下来我们将遇到另一个名为 test 的函数,它是实际的测试块:

describe("Filter function", () => {test("it should filter by a search term (link)", () => {// actual test});
});

这里 describe 的类型是 jest.Describe, 该函数接受两个输入参数,其类型分别为字符串和 jest.EmptyFunction

而 jest.EmptyFunction, 定义很简单:

type EmptyFunction = () => void;

此时我们已准备好编写测试。 请记住,测试是输入、功能和预期输出的问题。 首先让我们定义一个简单的输入,一个对象数组:

describe("Filter function", () => {test("it should filter by a search term (link)", () => {const input = [{ id: 1, url: "https://www.url1.dev" },{ id: 2, url: "https://www.url2.dev" },{ id: 3, url: "https://www.link3.dev" }];});
});

接下来,我们将定义预期结果。 根据规范,被测函数应排除 url 属性与给定搜索词不匹配的对象。

例如,我们可以期待一个包含单个对象的数组,给定“链接”作为搜索词:

describe("Filter function", () => {test("it should filter by a search term (link)", () => {const input = [{ id: 1, url: "https://www.url1.dev" },{ id: 2, url: "https://www.url2.dev" },{ id: 3, url: "https://www.link3.dev" }];const output = [{ id: 3, url: "https://www.link3.dev" }];});
});

现在我们已准备好编写实际测试。 我们将使用 expect 和一个 Jest 匹配器来检查我们虚构的(目前)函数在调用时是否返回预期结果。

这是测试:

expect(filterByTerm(input, "link")).toEqual(output);

完整的代码:

describe("Filter function", () => {test("it should filter by a search term (link)", () => {const input = [{ id: 1, url: "https://www.url1.dev" },{ id: 2, url: "https://www.url2.dev" },{ id: 3, url: "https://www.link3.dev" }];const output = [{ id: 3, url: "https://www.link3.dev" }];expect(filterByTerm(input, "link")).toEqual(output);});
});

执行命令行:npm test
测试通过:

测试代码的 coverage:

npm test – --coverage

更多Jerry的原创文章,尽在:“汪子熙”:

Jest 测试框架使用的学习笔记相关推荐

  1. 机器学习框架ML.NET学习笔记【5】多元分类之手写数字识别(续)

    一.概述 上一篇文章我们利用ML.NET的多元分类算法实现了一个手写数字识别的例子,这个例子存在一个问题,就是输入的数据是预处理过的,很不直观,这次我们要直接通过图片来进行学习和判断.思路很简单,就是 ...

  2. 26Play框架教程2学习笔记

    Play框架教程2学习笔记 文章目录 1 play框架01 1.1 概述 1.2 特性 1.2.1 无缝集成现有开发环境 1.2.2 热重载和修改Bug 1.2.3 简单的无状态MVC架构 1.2.4 ...

  3. 机器学习框架ML.NET学习笔记【1】基本概念与系列文章目录

    一.序言 微软的机器学习框架于2018年5月出了0.1版本,2019年5月发布1.0版本.期间各版本之间差异(包括命名空间.方法等)还是比较大的,随着1.0版发布,应该是趋于稳定了.之前在园子里也看到 ...

  4. 26Play框架教程1学习笔记

    Play框架教程1学习笔记 文章目录 1play教程 第一课 1.1 play是什么 1.2 REST风格是什么 1.3 play的优点和缺点 2 play教程 第二课 2.1 搭建开发环境 2.1. ...

  5. Jest测试框架学习(一)

    前言 jest是针对JavaScript的测试框架.如果遵循TDD原则,在任何功能开发之前都需要先写测试.而测试分为单元测试,集成测试和系统测试. 单元测试 单元测试可以理解为对于单个函数(单一功能) ...

  6. 史上最全 Appium 自动化测试从基础到框架实战精华学习笔记(一)

    本文为霍格沃兹测试学院学员学习笔记,进阶学习文末加群. 对测试人来说,Appium 是非常重要的一个开源跨平台自动化测试工具,它允许测试人员在不同的平台(iOS.Android 等)使用同一套 API ...

  7. 测试Servlet生命周期学习笔记

    测试环境:windows xp旗舰版 软件环境:myclipse8.5+tomcat7.0 ****************************************************** ...

  8. 【Django】创建项目及框架介绍,学习笔记(一)

    [学习教程] 1.Django基础教程:https://code.ziqiangxuetang.com/django/django-tutorial.html 2.Django博客:http://ww ...

  9. 霍格沃兹测试开发学社技术学习笔记之——Python基础笔记

    # 阶段十一-Python语言和测试框架(1) ## 1.pycharm环境变量配置和安装 ## 2.基础数据类型 数字 字符串 ## 3.运算符 字符串算数运算符 比较运算符 赋值运算符 逻辑运算符 ...

最新文章

  1. global在python_在Python中使用“global”关键字
  2. 在Windows 7中的Windows Media Player 12中快速预览歌曲
  3. 线性系统的基本理论与运算
  4. xlsx文件打开乱码_Excel 2016 双击无法打开xlsx文件怎么办?
  5. LeetCode 1094. 拼车
  6. 比其他行业晚了十年的工业软件,转型的核心和动力是什么?
  7. 你必须学会HTML和CSS的9大理由,让你在以后的工作中更香
  8. 六下计算机教学总结,六年级信息技术教师教学工作总结
  9. SpringBoot连接Gbase数据库
  10. 软件开发工作量评估:基于FPA功能点分析法的深入解读
  11. C语言入门130题-OJ
  12. 版权微talk | 两部门发文,拟出台相关方案,全面加强知识产权保护
  13. 十进制小数化为二进制小数的方法是什么_二进制的转换
  14. 图片处理算法工程师面试及笔试
  15. Java Stream流总结
  16. 利用jsdelivr+github使用免费又好用的全球节点CDN
  17. imToken 投资 imKey 并推出通用硬件钱包方案
  18. beyond compare linux中文包,linux 下安装 Beyond Compare
  19. OpenDaylight中MD-SAL学习笔记
  20. error #18 expected a “)”和error #140 too many arguments in function call

热门文章

  1. Hibernate事务管理
  2. JAVA自学笔记21
  3. 大数据泄露你的行踪?隐私不再是隐私
  4. MapReduce简介
  5. 【CCL】连通区域提取
  6. extern “C”
  7. 寻一名师傅叫我破译电脑各种密码和攻克防火墙
  8. 40个很棒的由html5开发的网络游戏案例
  9. Java中 ArrayList类常用方法和遍历
  10. Oracle-洛总脚本--查询相关慢SQL