【js中的单元测试】【30秒快速入门】

2023-11-18

什么是单元测试
测试是一种验证我们代码是否可以按预期工作的方法,换种说法就是写些代码来验证一段代码的正确性,被测试的对象可以是样式、功能、流程、组件等。单元测试是对软件中最小可测试单元进行检测和验证。单元测试能有效的提升工作效率:
1.能监测出潜在的bug
2. 能快速反馈功能的输出
3. 能保证代码重构的安全性
4. 能方便协同开发
如何能写出最简单的单元测试代码?下面介绍两种简单单元测试。

1、编写测试代码片段。

废话不多说,直接上代码。被测对象单元如:

let  add=(a,b)=>a+b;

   
   
   
   
  • 1

测试代码:

let expect = (result) => {
    return {
        toBe: function (actual) {
            if (actual !== result) {
                throw new Error("期望值与实际值不等")
            }
        }
    }
};

   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

接着可以写一个方法用来测试;

let test = function (desc, fn) {
    try {
        fn();
    } catch (e) {
        console.log(`${desc}没有通过`)
    }
}

   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

再控制台验证:

test('加法测试', () => {
    expect(add(1, 2)).toBe(4)
})

   
   
   
   
  • 1
  • 2
  • 3

这样一个简单的单元测试单元测试代码就完成了。

2、使用jest测试。

若不想写单元测试代码,也可以借助第三方测试工具jest,是react里面的一种测试方法,下面介绍jest的使用。
1. jest必须基于node环境下,首先使用命令行安装jest,npm i -D jest或者yarn add -D jest进行安装。通过npm ls jest查看jest是否安装成功,如果有jest版本号就表示成功。
2. 在当前工作区使用命令行npm init -y将对应配置项集成在pekage.json中,如下:。

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "text.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  1. 准备工作做好了,现在可以开始测试了。如在工作区创建测试文件math.js,math.js可以写被测试代码如let add=(a,b)=>a+b;,然后将被测试对象向外暴漏module.exports={add};。
let add = (a, b) => a + b;
module.exports = { add };

   
   
   
   
  • 1
  • 2
  1. 工作区再创建math.test.js用作测试文件,测试文件需要先将被测试对象引进来,使用test方法测试,代码片段如下:。
let { add } = require("./math");
test("加法测试", () => { 
    expect(add(1,2)).toBe(3)
})

   
   
   
   
  • 1
  • 2
  • 3
  • 4
  1. 最后一步也是最关键的一步,修改webpack.json文件。"scripts": { "test": "echo \"Error: no test specified\" && exit 1" },将test的内容改成jest,使用命令行npm run test就可以测试代码的正确性,这样一个简单的单元测试就完成了。下面是通过测试代码片段:
 PASS  ./math.test.js
  √ 加法测试 (2ms)

Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 1.823s
Ran all test suites.

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
小结

上述讲了两种单元测试的方法。一是自己写代码片段去验证被测试对象,二是使用第三方的jest测试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【js中的单元测试】【30秒快速入门】 的相关文章

  • require('babel/register') 不起作用

    我在客户端上有一个用 ES6 编写的同构应用程序Babel 转译器 http babeljs io 我希望我的 Express 服务器具有与客户端代码相同的 ES6 语法 很遗憾require babel register 不起作用 服务器
  • Jquery文件上传插件进度条

    这个插件 https github com blueimp jQuery File Upload wiki管理网页中的文件上传 并且可以在上传过程中添加很多 UI 元素 您创建一个输入文件类型元素 然后绑定 js 文件 使用实例化代码和 w
  • 有没有办法将 Google 文档分割成多个 PDF?

    我想在 Google Scripts VBA 代码中复制我为 Word 文档编写的代码 基本上 它通过搜索我插入文档中的标签 将文档 切片 为多个 PDF 文件 目的是允许合唱团使用 forScore 管理乐谱的应用程序 在切片点插入先前注
  • Javascript 无法正确排序 DECIMAL 数字

    我有一些代码可以按字母顺序对名称进行排序 我遇到的问题是它处理小数的方式 它对名称进行排序 如下所示 我宁愿它按数字递增 DOG 1 0510 DOG 1 1031 DOG 11 1792 DOG 12 0920 DOG 12 1170 D
  • 刷新页面后保留输入值

    我有一个带有输入字段的表单 该输入包含一个下拉菜单 从数据库中读取信息 如果用户输入值 并且当他到达下拉菜单时 他没有找到他想要的内容 他会转到另一个页面将此信息添加到下拉菜单 然后转到第一页继续输入信息 如果他转到另一个页面向下拉菜单添加
  • jQuery数据表设置列设计和成功回调中的值

    我为我的数据表编写了以下代码 它用我的数据库中的内容填充表 如下所示 if datatable null datatable destroy datatable tableProducts DataTable pageLength 50 b
  • 如何从对象数组中删除所有重复项?

    This is a large array of objects e g let totalArray id rec01dTDP9T4ZtHL4 fields user id 170180717 user name abcdefg even
  • 我可以用一个简单的函数制作一个迭代器吗? (没有生成器或 Symbol.iterator)

    我一直在尝试使用普通函数创建一个迭代器 而不使用生成器或使用Symbol iterator用于学术目的的协议 为此 我创建了一个函数 它返回一个带有next参数 但尝试将其作为iterable的论证for of循环会产生不需要的结果 这是到
  • 光标:IE 8 和 9 中的自动行为

    我想要的是为整个正文标记指定cursor pointer 这样页面的背景是可点击的 但我也希望页面的其余部分像以前一样工作 所以我尝试为div设置cursor auto 其中包含这一页 在 FF Chrome 和 safari 中 它工作得
  • 如何显示/隐藏jsf组件

    在我的一个 JSF 应用程序中 顶部的标题部分包含 selectOneMenu 底部的内容部分显示过滤器组件 默认情况下 应用程序首先在顶部显示 selectOneMenu 数据 在底部显示相应的 Filter 信息 如果用户选择不同的se
  • 如何检查侧边栏视图是否已经在主干中渲染?

    通常 用户通过主页进入网站 然后我在那里渲染侧边栏视图 接下来 用户单击链接 路由器呈现另一个视图并替换原始内容视图 侧边栏视图不会重新渲染 当用户在子页面上单击刷新时 侧边栏不会呈现 如何检查视图是否存在并且已渲染 划分责任并坚持下去 不
  • Google 地图 Javascript v3 折线点击事件

    我正在尝试显示一张地图 其中有多条路线布置为折线 单击多段线时 我想显示特定于该线的数据 将数据与线关联不是问题 但无论单击哪条线 显示的数据都会与最近绘制的线关联 就好像每条新折线都会覆盖最后一条线一样 我有一个数据库 其中包含 gpx
  • Ajax 函数在重定向后不保存滚动位置

    正如标题所述 我编写了一个 ajax 函数 该函数应该滚动到用户在重定向之前所在的位置 我写了一个alert对于测试场景 它确实触发了 但滚动不断回到顶部 我在这里做错了什么 JavaScript ajax type GET url Adm
  • 如何使用 Node.js 解析 JSON? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我应该如何使用 Node js 解析 JSON 是否有一些模块可以安全地验证和解析 JSON 你可以简单地使用JSON parse h
  • Kendo 刷新 (DropDownList.refresh()) 不起作用错误未定义

    我试图在另一个 DropDownList 更改后刷新下拉列表 但 Refresh 方法未定义错误正在升级 我尝试再次读取数据源 它显示它正在加载 但数据仍然相同 帮助解决这个问题请 Code DropDownList1 change fun
  • 检测 html 选择框上的编程更改

    有没有办法让 HTML 选择元素在每次以编程方式更改其选择时调用函数 当使用 JavaScript 修改选择框中的当前选择时 IE 和 FF 都不会触发 onchange 此外 更改选择的 js 函数是框架的一部分 因此我无法更改它以在结束
  • 如何更改数据表中标题单元格的内容?

    我正在使用数据表 http datatables net plugin 在我的可排序列上 我想用按钮替换列文本 但是这样做 oSettings aoColumns i nTh text 我可以检索相应列的文本 但是 oSettings ao
  • 如何使用 Chart.js 版本 3.2.1 在圆环图中添加文本

    我正在使用 Canvas 在 HTML 中使用 如何使用在圆环图中添加文本 这是我的 javascript 代码和 HTML 代码 我使用了图表js版本3 2 1 所以请给出相同版本 3 的解决方案 var overallStatsCanv
  • 尽管 getBoundingClientRect() 是假的,但如何将事件坐标转换为 SVG 坐标?

    我正在尝试根据鼠标的位置在 SVG 元素上动态绘制内容 不幸的是 我很难将 mousemove 事件中的鼠标坐标转换为 SVG 元素的坐标空间 这是我一直在测试的一个有缺陷的函数 CylinderDemo prototype handleM
  • 加载谷歌地图控件时是否有事件?

    我知道tilesloaded 但控件似乎在该事件之后加载 我基本上希望能够通过 jQuery 获取控件 但甚至找不到正确的监听 我也刚刚处理了 没有类似的事件 在控件可见之前空闲和tilesloaded触发 因此 基本上将 特殊控制 类添加

随机推荐

  • python写入txt不覆盖_python不能覆盖文件内容如何解决

    python不能覆盖文件内容的解决方法 使用 with open f w as file 命令即可覆盖文件内容 w 代表每次运行都覆盖文件内容 python不能覆盖文件内容有可能是因为文件的打开方式为追加写方式 更改文件打开方式即可实现再次
  • Linux内存分析free与cache清理

    1 free命令 Linux中查看内存的命令为free 命令如下 free h total used free shared buff cache available Mem 62G 4 9G 627M 520K 57G 57G Swap
  • 面试顺序问题:用数学建模优化生产与服务运作中的管理问题

    例题 有 4 名同学到一家公司参加三个阶段的面试 公司要求每个同学都必须首先 找公司秘书初试 然后到部门主管处复试 最后到经理处参加面试 并且不允许插队 即 在任何一个阶段 4 名同学的顺序是一样的 由于 4 名同学的专业背景不同 所以每人
  • Spring知识体系

    Spring知识体系 一 基本介绍 1 Spring全家桶 Spring SpringMVC Spring Boot Spring Cloud 其中Spring是其他的基础 2 Spring 出现的目的是为了解决企业级开发的难度 减轻对项目
  • ARouter在kotlin中使用,传递Int Long Double类型的参数空指针异常

    ARouter在kotlin中使用 传递Int Long Double类型的参数由A activity传递到 B activity 在B Activity接收时出现空指针异常 java lang NullPointerException A
  • clickhouse insert的数据结构

    clickhouse insert大致分为两部分 1 sql语句部分 insert into table f1 f2 2 数据部分 数据部分又分为3部分 头 数据 尾 数据头 数据块1 数据块2 数据块N 数据尾 从中可以看出 每个inse
  • Mybatis对数据的增删改查

    文章目录 创建sql的映射文件 增加 插入数据 修改 删除 查找 向数据库参数传递 简单参数 多个参数 传入对象 使用map传递 Mybatis的基本增删改查总的代码演示 创建sql的映射文件
  • 在 esp32 上运行 lvgl + freetype

    前言 最近有个需求 如何在 esp32 上运行 lvgl freetype 这个想法的难点是 freetype 的环境搭建 我想将其做得非常简单 最好的办法是做成组件来使用 所以我将 freetype 的相关依赖做成了 esp idf 组件
  • JS基础 预编译 与 AO对象

    预编译发生在函数执行的前一刻 预编译在函数执行的前一刻完成 function pre a console log a var a 100 console log a console log b var b function console
  • 将代码上传到指定仓库的步骤(git指令)

    1 git status 查看状态 2 git branch 查看目前所在的分支 3 git add 将内容从工作目录添加到暂存区 有的时候git add 不起作用 这时可以用 git add A 4 git commit m v1 更新代
  • 如何在CSDN博客添加友情链接

    如何在CSDN博客添加友情链接 每次看到别人的CSDN博客左侧都能够加上友情链接 我发现没有直接制定的 所以经过研究 我发现可以这样来添加友情链接 首先 进入博客设置 找到博客栏目 在里面新建一个栏目 名字随便 我这叫BLOG推荐 然后把下
  • 分布式锁工具 Redisson,贼香!!

    一 Redisson概述 二 分布式锁 三 Redisson分布式锁 四 RLock 五 公平锁 六 总结 一 Redisson概述 什么是Redisson Redisson是一个在Redis的基础上实现的Java驻内存数据网格 In Me
  • 攻防世界 web篇(一)

    攻防世界 web篇 一 inget fileclude easyupload fileinclude very easy sql 攻防世界 是一群信息安全大咖共同研究的答题 竞赛 以游戏方式结合的一款新型学习平台 融入多种场景在线题型 集实
  • 渗透测试——报错注入

    1 报错注入原理 由于后台没有对数据库的信息做过滤 会输出到前台显示 那么我们就可以通过制造报错函数 将查询语句带入到数据库中 以报错信息显示出来 2 报错注入漏洞产生的条件 1 参数用户可控 前端传入的参数内容由用户控制 2 参数带入数据
  • ArcGISMapsSDK for UnrealEngine_Beta2_00

    ArcGISMapsSDK for UnrealEngine Beta2 00 Prepare 1 Esri Community 2 All Communities 3 ArcGIS Maps SDK for Unreal Engine 4
  • Swing可视化设计:在IntelliJ IDEA中安装JFormDesigner教程

    Swing可视化设计 在IntelliJ IDEA中安装JFormDesigner教程 前言 最近课设大多需要gui设计 排除自学的情况 大部分同学都只接触过swing设计gui swing可视化插件将大大提高工作效率 这里提高破解版使用方
  • 数据结构与算法【Java】02---链表

    前言 数据 data 结构 structure 是一门 研究组织数据方式的学科 有了编程语言也就有了数据结构 学好数据结构才可以编写出更加漂亮 更加有效率的代码 要学习好数据结构就要多多考虑如何将生活中遇到的问题 用程序去实现解决 程序 数
  • 微信小程序申请 wx.getLocation 接口 审核一直不通过

    项目需要通过微信的 getLocation 获取本地的位置信息 经纬度 但是提交很多次审核都不通过 最后通过写了个项目里用不到的 导航功能 截图录屏才通过了审核 以下申请文案及配图仅供参考 因当前业务涉及就近医院挂号取号业务 需获取用户地理
  • python 使用pip install 手动安装本地包的方法

    Installing pystan manually fixed the issue otherwise it would just hang forever GitHub git clone https github com facebo
  • 【js中的单元测试】【30秒快速入门】

    什么是单元测试 测试是一种验证我们代码是否可以按预期工作的方法 换种说法就是写些代码来验证一段代码的正确性 被测试的对象可以是样式 功能 流程 组件等 单元测试是对软件中最小可测试单元进行检测和验证 单元测试能有效的提升工作效率 1 能监测