Jest快速使用指南
1. 引言
写了几个函数,怎么知道写得对不对呢?
可以通过测试函数,当然开发中测试的意义不只是这个
Jest是常用的JavaScript测试框架
官网为:Jest · Delightful JavaScript Testing (jestjs.io)
GitHub站点为:jestjs/jest: Delightful JavaScript Testing. (github.com)
本文描述快速使用Jest进行代码测试
2. 环境准备
安装:
npm install --save-dev jest
配置:
在项目的 package.json中添加测试命令:
{
// ...
"scripts": {
// ...
"test": "jest"
}
}
,配置完毕,不妨测试一下
新建一个JS文件并编写一个函数(sum.js):
function sum(a, b) {
return a + b;
}
module.exports = sum;
新建一个JS测试文件并编写测试函数(sum.test.js):
const sum = require('./sum');
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
在console中执行命令npm run test:
npm run test
> test
> jest
PASS ./sum.test.js
√ adds 1 + 2 to equal 3 (5 ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 0.615 s, estimated 1 s
Ran all test suites.
测试成功
更详细的描述可以参考官方的Quick Start:快速开始 · Jest (jestjs.io)
默认的配置如果不满足使用(如,需使用ES6语法、TypeScript等),需要进行配置
下面进行配置babel以实现ES6语法支持和TypeScript支持:
安装:
npm install --save-dev babel-jest @babel/core @babel/preset-env @babel/preset-typescript ts-jest @types/jest
配置:
项目根目录下新建babel.config.js并写入配置:
module.exports = {
presets: [
['@babel/preset-env', {targets: {node: 'current'}}],
'@babel/preset-typescript',
],
};
这些配置参数均来自官方文档,使用时直接查阅即可
更为详细的配置项参考:快速开始 · Jest (jestjs.io)
3. 常用语法
3.1 常用匹配器
匹配器(matchers)就是将预期结果与测试结果比对,检测是否一致(匹配)
常用的匹配器有:
toBetoEqualtoBeCloseTotoMatchtoContaintoThrow等
见字识义,根据函数名就可以推知其使用方法,如判断字符串匹配使用 toMatch 、判断数组是否包含使用toContain:
test('字符串匹配', () => {
expect('team').toMatch('team');
});
// 测试通过
test('数组是否包含', () => {
expect(['a', 'b', 'c']).toContain('b');
});
// 测试通过
匹配器更为具体的使用方法参考:Expect 断言 · Jest (jestjs.io)
3.2 异步函数
测试异步函数,可以使用Promise.then(),也可以使用await\async
function fetchData(callback) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('异步函数返回值');
}, 1000);
});
}
test('异步函数', () => {
return fetchData().then(data => {
expect(data).toBe('异步函数返回值');
});
});
// 测试通过
test('异步函数2', async () => {
const data = await fetchData();
expect(data).toBe('异步函数返回值');
}
);
// 测试通过
异步函数更为具体的使用方法参考:测试异步代码 · Jest (jestjs.io)
3.3 Hooks
Hooks可以理解为在一定时间触发的函数,比如测试函数执行前,测试函数执行后,常见的有:
beforeEachafterEachbeforeAllafterAll等
见字识义,根据函数名就可以推知其使用方法,如在每个测试函数前触发的函数就是beforeEach:
let a = null;
beforeEach(() => {
a = 1;
});
test('beforeEach', () => {
expect(a).toBe(1);
});
// 测试通过
Hooks更为具体的使用方法参考:安装和移除 · Jest (jestjs.io)
3.4 Mock
Mock即模拟,比如开发时后端没有提供数据,这时候难以测试接口函数,就可以使用Mock
下面主要模拟axios模块,并将axios.get()返回值设置为自定义的
import axios from 'axios';
function getUsers() {
return axios.get('/users.json').then(resp => resp.data);
}
jest.mock('axios');
test('should fetch users', () => {
const users = [{name: 'Bob'}];
const resp = {data: users};
axios.get.mockResolvedValue(resp)
return getUsers().then(data => expect(data).toEqual(users));
});
Mock更为具体的使用方法参考:模拟函数 · Jest (jestjs.io)
4. 参考资料
[2] jestjs/jest: Delightful JavaScript Testing. (github.com)
Jest快速使用指南的更多相关文章
- Rancher 快速上手指南操作(1)
Rancher 快速上手指南操作(1)该指南知道用户如何快速的部署Rancher Server 管理容器.前提是假设你的机器已经安装好docker了.1 确认 docker 的版本,下面是 ubunt ...
- AngularJS快速入门指南20:快速参考
thead>tr>th, table.reference>tbody>tr>th, table.reference>tfoot>tr>th, table ...
- AngularJS快速入门指南19:示例代码
本文给出的大部分示例都可以直接运行,通过点击运行按钮来查看结果,同时支持在线编辑代码. <div ng-app=""> <p>Name: <input ...
- AngularJS快速入门指南18:Application
是时候创建一个真正的AngularJS单页面应用程序了(SPA). 一个AngularJS应用程序示例 你已经了解了足够多的内容来创建第一个AngularJS应用程序: My Note Save Cl ...
- AngularJS快速入门指南17:Includes
使用AngularJS,你可以在HTML中包含其它的HTML文件. 在HTML中包含其它HTML文件? 当前的HTML文档还不支持该功能.不过W3C建议在后续的HTML版本中增加HTML import ...
- AngularJS快速入门指南16:Bootstrap
thead>tr>th, table.reference>tbody>tr>th, table.reference>tfoot>tr>th, table ...
- AngularJS快速入门指南15:API
thead>tr>th, table.reference>tbody>tr>th, table.reference>tfoot>tr>th, table ...
- AngularJS快速入门指南14:数据验证
thead>tr>th, table.reference>tbody>tr>th, table.reference>tfoot>tr>th, table ...
- AngularJS快速入门指南13:表单
一个AngularJS表单是一组输入型控件的集合. HTML控件 HTML输入型标签标包括: input标签 select标签 button标签 textarea标签 HTML表单 HTML表单将各种 ...
- AngularJS快速入门指南12:模块
AngularJS模块定义了一个application. 模块是一个application中不同部分的容器. application中的所有控制器都应该属于一个模块. 带有一个控制器的模块 下面这个a ...
随机推荐
- 2023年多校联训NOIP层测试1
2023年多校联训NOIP层测试1 T1 luogu P6882 [COCI2016-2017#3] Imena \(50pts\) 赛场上被如何输入和判断是否合法薄纱了,赛后发现还有数字这一说,而且 ...
- .NET 9 首个预览版发布:瞄准云原生和智能应用开发
前言 前不久.NET团队发布了.NET 9 的首个预览版,并且分享.NET团队对 .NET 9 的初步愿景,该愿景将于今年年底在 .NET Conf 2024 上发布.其中最重要的关注领域是:云原生和 ...
- sensitive-word-admin 敏感词控台 v1.2.0 版本开源
开源目的 丰富 sensitive-word 的生态. 提供最基本的操作例子,便于在此基础上丰富实现自己的敏感词控台. 避免重复开发的成本,让更多的精力专注于业务. 拓展阅读 sensitive-wo ...
- Centos7的KVM安装配置详解
KVM和虚拟化 虚拟化有几种类型: 完全虚拟化(Full virtualization), 虚机使用原始版本的操作系统, 直接与CPU通信, 是速度最快的虚拟化. 半虚拟化(Paravirtualiz ...
- python中矩阵切片维数微秒变化
1 前言 使用切片访问矩阵的部分数据(特别是一行或一列数据)时,通常会出现切片维数怎么在瞎变化,以致于不得不用reshape()强制改变维数.在深度学习中,网络对矩阵维数的要求是非常严格的,往往就是这 ...
- nginx配置反向代理缓存
说明 最近运维一个网站里面含有不经常变化的小图片,而每次请求都需要调用file接口获取不太合适.所以就想利用nginx的反向代理缓存来减轻服务接口的请求压力. 工作原理 Nginx反向代理缓存,当客户 ...
- Spring Boot图书管理系统项目实战-3.用户登录
导航: pre: 2.项目搭建 next:4.基础信息管理 只挑重点的讲,具体的请看项目源码. 1.项目源码 需要源码的朋友,请捐赠任意金额后留下邮箱发送:) 2.登录页设计 <!DOCTYP ...
- .net+bootstrap写的一个还不错的音乐网站
以前做的一款设计音乐网站,分享下. 技术用的是.net +sqlserver 大致的样子是这样的. 1.首页如下: 2.播放歌词页面如下:歌词自动滚动,且可悬停. 3.歌单信息页面如下: 详细页面如下 ...
- 【Azure Redis 缓存】Redis的监控方式? 是否有API接口调用来获取监控值
问题描述 对于PaaS的Azure Cache for Redis,Azure中有哪些监控方式?是否能有api接口调用来获取监控值? 问题答案 1) 在Redis的门户中,使用Metrics查看Red ...
- 十: SQL执行流程
SQL执行流程 1. MySQL 中的 SQL执行流程 MySQL的查询流程: 1.1 查询缓存 Server 如果在查询缓存中发现了这条 SQL 语句,就会直接将结果返回给客户端:如果没 有,就进入 ...