首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Jest中resetAllMocks、resetModules、resetModuleRegistry、restoreAllMocks的区别

Jest中resetAllMocks、resetModules、resetModuleRegistry、restoreAllMocks的区别

基础概念

  1. resetAllMocks:
    • 重置所有模拟(mocks)和实例,包括它们的调用计数、结果和实例。
    • 这不会影响模块的缓存或导入。
  • resetModules:
    • 清除模块缓存,重新加载所有模块。
    • 这会使得每次测试运行时都重新导入模块,类似于第一次导入。
  • resetModuleRegistry:
    • 重置模块注册表,类似于resetModules,但不重新加载模块。
    • 这会清除模块的缓存,但不会重新导入模块。
  • restoreAllMocks:
    • 恢复所有模拟(mocks)到它们的原始实现。
    • 这通常用于在测试结束后恢复全局对象(如console.log)的原始行为。

相关优势

  • resetAllMocks:
    • 适用于需要重置模拟状态的情况,而不影响模块缓存。
  • resetModules:
    • 适用于需要确保每个测试运行时都从干净的状态开始的情况。
  • resetModuleRegistry:
    • 适用于需要清除模块缓存但不重新导入模块的情况。
  • restoreAllMocks:
    • 适用于需要在测试结束后恢复全局对象原始行为的情况。

类型

  • resetAllMocks: 函数
  • resetModules: 函数
  • resetModuleRegistry: 函数
  • restoreAllMocks: 函数

应用场景

  • resetAllMocks:
  • resetAllMocks:
  • resetModules:
  • resetModules:
  • resetModuleRegistry:
  • resetModuleRegistry:
  • restoreAllMocks:
  • restoreAllMocks:

遇到的问题及解决方法

  1. 模拟状态未重置:
    • 问题: 在多个测试之间,模拟的状态(如调用计数、结果)可能会影响其他测试。
    • 原因: 模拟的状态没有被正确重置。
    • 解决方法: 使用resetAllMocks来重置所有模拟的状态。
  • 模块缓存影响测试:
    • 问题: 模块缓存可能导致某些测试依赖于之前的测试结果。
    • 原因: 模块没有被重新加载。
    • 解决方法: 使用resetModules来清除模块缓存并重新加载模块。
  • 全局对象行为未恢复:
    • 问题: 在测试结束后,全局对象的行为可能被模拟改变,影响后续测试或应用运行。
    • 原因: 全局对象的原始行为没有被恢复。
    • 解决方法: 使用restoreAllMocks来恢复所有模拟到它们的原始实现。

参考链接

通过这些方法和概念,你可以更好地管理和控制Jest测试中的模拟和模块状态。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

万字详文:彻底搞懂 Jest 单元测试框架

Jest 作为 NPM 包发布,可以安装并运行在任何 JavaScript 项目中。Jest 是目前前端最流行测试库之一。 测试意味着什么 在技术术语,测试意味着检查我们代码是否满足某些期望。...,为了测试在同一个文件夹创建一个测试文件,命名为 test.spec.js,这特殊后缀是 Jest 约定,用于查找所有的测试文件。...模拟 在复杂测试场景,我们一定绕不开一个 Jest 术语:模拟(mock) 在 Jest 文档,我们可以找到 Jest 对模拟有以下描述:”模拟函数通过抹去函数实际实现、捕获对函数调用,以及在这些调用传递参数.../packages/jest-cli/bin/jest.js /path/test.spec.js 就会执行 jest.js 文件,然后进入到 build/cli 文件 run 方法,run 方法会对命令各种参数做解析...: runtime.resetModules runtime.clearAllMocks runtime.resetAllMocks runtime.restoreAllMocks runtime.requireModule

7.7K20
  • 使用 Jest 进行前端单元测试

    例如下面这段典型前端业务代码,涉及到网络请求、DOM操作等多个步骤,不在浏览器环境是无法直接执行。 ....我们只要稍作加工,就可以指定各个文件行为,并模拟我们想要情况来进行不同测试,例如本例控制 fetchUser 返回。...常用 mock 相关 API: require.requireActual(moduleName)require.requireMock(moduleName) jest.resetAllMocks(...options) jest.resetModules() jest.setMock(moduleName, moduleExports) jest.unmock(moduleName) 在生成了 mock...Timer 业务代码如果有 setTimeout 这样计时器,在测试过程如果真实去执行,可能会严重拖慢整个测试项目的执行时间,设想一个功能有 n 个用例去测试,延时就会被重复 n 倍。

    5.5K90

    那些年错过React组件单元测试(上)

    transform: 设置哪些文件代码是需要被相应转译器转换成 Jest 能识别的代码,Jest 默认是能识别 JS 代码,其他语言,例如 Typescript、CSS 等都需要被转译。...Mock 介绍jestmock之前,我们先来思考一个问题:为什么要使用mock函数? 在项目中,一个模块方法内常常会去调用另外一个模块方法。...jest与mock相关api主要有三个,分别是jest.fn()、jest.mock()、jest.spyOn()。使用它们创建mock函数能够帮助我们更好测试项目中一些逻辑较复杂代码。...describe("xxx页面", () => { // beforeEach(() => { // jest.resetAllMocks() // }) // 使用 snapshot...总结 到这里,关于前端单元测试一些基础背景和Jest基础api就介绍完了,在下一篇文章,我会结合项目中一个React组件来讲解如何做组件单元测试。 ?

    5K20

    不换周刊 第22期

    、Unit Test、Jest 1.Bun new bundler 相关地址:https://bun.sh/blog/bun-bundler Bun 有了一个原生打包工具,经过基准测试后速度,Unbelievable...刚好作为承接第一条周刊内容,作为一个使用者感受,Shane O'Sullivan 有了自己心得体会,包括对于 vercel 上构建内容一些坑点。...6.你 Jest 测试可能是错误 相关地址:https://jamiemagee.co.uk/blog/your-jest-tests-might-be-wrong/ 你 Jest 套件配置可能有些问题...,让程序产生“欺骗”; { clearMocks: true, resetMocks: true, restoreMocks: true, resetModules: true // It...检测文件名,支持完全受控文件名,保持项目文件名格式一致性是一个不错选择。 周刊说了太多次 so cool,是因为我最近在看《闪电侠》,“巴里”(作为主人公)很喜欢说一个词,waw!

    9110

    前端单元测试那些事

    ,在程序某个特定点该表达式值为真,判断代码实际执行结果与预期结果是否一致,而断言库则是讲常用方法封装起来 主流断言库有 assert (TDD) assert("mike" == user.name...在网页打开coverage目录下index.html就可以看到具体每个组件测试报告 ? ? 语句覆盖率(statement coverage)是否每个语句都执行了?...对象执行了回调函数 注:有时候会存在一种情况,在同个组件调用同个方法,只是返回值不同,我们可能要对它进行多次不同mock,这时候需要在beforeEach使用restoreAllMocks方法重置状态...@click()和@click也是有区别的。 2。...渲染问题 - 组件库提供组件渲染后html,需要通过wrapper.html()来看,可能会与你从控 制台看到html有所区别,为避免测试结果出错,还应console.log一下wrapper.html

    4.3K40

    别再用JSON配置文件了

    一开始 我犯了个错 前段时间,我为了模块化项目,把一些通用代码抽象出来形成了单独库,每个新项目中都要把之前开发配置工具再配置一遍,Lint,Prettier等等。...一开始我想偷懒,每个新项目都要配置一遍,那这些配置性东西我想写越少越好,所以我用了package.jsonJSON配置。...然后我把所有的配置文件放在一个单独,基于我们使用工具(比如Babel)提供扩展机制,我们可以共享配置。...有没有这个必要大家可以根据自己场景判断,如果有需要,我们可以使用任何我们熟悉测试框架来测试,比如Jest。...config", () => { beforeEach(() => { oldEnv = process.env.NODE_ENV; }); afterEach(() => { jest.resetModules

    61430

    编写接口请求库单元测试与 E2E 测试思考

    return data]) 所以测试可以这样去写: tsx 1 describe('client `get` method', () => { 2 afterEach(() => { 3 jest.resetAllMocks...所以在 mockImplementation ,判断了是不是这个这个 url。 以上则是单测一环,client - adaptor - core 测试。 然后说说单个接口怎么去写单测。...,但是非常关键是用例路径一定要写对,上面那个的话就是 /comments/11111,mockResponse是我封装一个测试方法。...我已 Express 、 Jest 为例。我想法是直接用 Express 托管一系列接口。当然不是手动去启动一个服务,而是 Express 直接跑在 Jest 测试。...因为固定端口在 Jest 并行测试容易被占用。 测试用例也比较好写,只要按照传统前后端接口请求去写就可以了。

    1K40

    React背后工具化体系

    ,因为CommonJS Module对Jest一些特性(比如resetModules)更友好(即便切换到ES Module,在需要模块状态隔离场景,仍然要用require,所以切换意义不大) 至于Haste...'); 从表面上解决了长路径引用问题(并没有解决项目结构深层嵌套根本问题),使用非标准模块机制有几个典型坏处: 与标准不和,接入标准生态工具时会面临适配问题 源码难读,不容易弄明白模块依赖关系...bundle冗余代码 统一代码风格当然有利于协作,另外,对于开源项目,经常面临风格各异PR,把严格格式化检查作为持续集成一个强制环节能够彻底解决代码风格差异问题,有助于简化开源工作 P.S...检测,先声明一个含有dev环境判断方法,在判断包含一个标识字符串(上例是^_^),然后运行时(通过DevTools)检查fn.toString()源码,如果含有该标识字符串就说明DCE失败(无用代码没在...会拖慢持续集成,影响开发工作流效率,而且会让持续集成也变得相对脆弱 自动化测试并不总能发现DOM问题,例如浏览器显示输入值可能与通过DOM属性取到不一致 不愿意做浏览器环境自动化测试,又想确保维护添加一些边界

    1.5K20

    学习笔记——在vue如何配置Jest(一)

    最近在搞Jest单元测试,如何在vue安装和使用jest我就不说了,前一篇文章简单说了一下在使用jest时遇到一些问题,但是我觉得并没有真正解决很好。...后面会在学习过程更新前面的那篇文章,加入后续遇到问题以及解决问题方法,持续做一个记录。   好了,废话不多说,咱们开始今天内容吧。...所以,我想在这篇文章,整理记录一下jest配置参数用法等。   jest配置文件是单独生成在unit文件夹下一个独立文件,并没有和vue-cli生成webpack构建环境相关联。...这是当前版本vue-cli生成jest.conf.js配置文件,我们可以在package.json配置项里看到,我们在npm run unit 时候,真正运行就是这个文件配置。   ...并且解释说明一下我在使用jest时候一个疑问,什么是localVue,shallowMount与mount与localVue区别是啥?localVue与Vue区别是啥?

    1.8K10

    学习笔记——在vue如何配置Jest(一)

    最近在搞Jest单元测试,如何在vue安装和使用jest我就不说了,前一篇文章简单说了一下在使用jest时遇到一些问题,但是我觉得并没有真正解决很好。...所以,我想在这篇文章,整理记录一下jest配置参数用法等。   jest配置文件是单独生成在unit文件夹下一个独立文件,并没有和vue-cli生成webpack构建环境相关联。...一、默认配置文件参数意义 我们先来看一张图,然后我一一介绍说明他们都是用来做什么:   这是当前版本vue-cli生成jest.conf.js配置文件,我们可以在package.json配置项里看到...collectCoverageFrom:为数组匹配文件收集覆盖率信息,即使并没有为该文件写相关测试代码,需要将collectCoverage设置为true,或者通过–corverage参数来调用jest...并且解释说明一下我在使用jest时候一个疑问,什么是localVue,shallowMount与mount与localVue区别是啥?localVue与Vue区别是啥?

    2K30

    Jest + React Testing Library 单测总结

    如果想要看如何安装 Jest,可以参考:Jest 上手。 Jest 常用配置项在根目录 jest.config.js ,常用配置可以参考:Jest 配置文件。...在 VS Code ,我们也可以安装插件:Jest Runner。 在代码,就可以快速跑测试用例,可以说非常方便了。...2.3 Jest Mock 在查看官方文档时候,Jest 匹配器还有一类匹配器专门用来检查 Jest Mock 函数。...Throw error Return array Return array Yes 从上面的表格可以看出来,定位方法在找单个元素时和多个元素时会做了一些区别,比如 getBy......get 和 query 区别主要是在未找到元素时,queryBy 会返回 null,这对于我们测试一个元素是否存在时非常有帮助。

    4.6K20

    前端自动化测试框架 Jest 极简教程

    Jest目标是减少开始测试一个项目所要花费时间和认知负荷,因此它提供了大部分你需要现成工具:快速命令行接口、Mock工具集以及它自动模块Mock系统。...此外,如果你在寻找隔离工具例如Mock库,大部分其它工具将让你在测试(甚至经常在你主代码)写一些不尽如人意样板代码,以使其生效。 Jest与Jasmine框架区别是在后者之上增加了一些层。...最值得注意是,运行测试时,Jest会自动模拟依赖。Jest自动为每个依赖模块生成Mock,并默认提供这些Mock,这样就可以很容易地隔离模块依赖。...Jest 测试生命周期 jest 测试提供了一些测试生命周期 API,可以辅助我们在每个 case 开始和结束做一些处理。...,不同之处在于在每个测试开始前执行 afterEach(fn, timeout): 每个 test 执行完后执行 fn,timeout 含义同上 afterAll(fn, timeout): 当前文件所有测试执行完成后执行

    1.8K20

    如何自动化测试 React Native 项目 (下篇) - 单元测试

    toMatchSnapshot方法会帮你对比这次要生成结构和上次区别。 当元素 prop 或者 state 不同时,会生成不同情况snapshot来覆盖这些情况下UI结构。...Jest snapshot 测试不仅可以对比React tree结构区别, 也可以对比其他可序列化区别。 比如对比Redux某个状态state是否和之前相同。...当 snapshot 结果需要升级更新时, 只需要执行 jest -u 指令即可更新之前生成 snapshot 结果。 为什么 Snapshot 在 React 测试是可靠呢?...我们测试脚本可以这么写: // Mock Logger module方法, 用jest.fn来实现spy方法 Logger.log = jest.fn(); // setup shallowWrapper...selector 是可嵌套, 但只要正确 mock redux state, 最终结果就应该是唯一。 4. Utils 测试 和普通js函数型单元测试没有区别,就不多赘述了。

    3.3K21

    Salesforce LWC学习(二十五) Jest Test

    部分时,通常都是前端进行测试,针对js测试其实也有类似于apex class test class类似的js test class,也就是今天说 Jest Test,Jest Test不只是针对于...所以如果在其他module创建目录不是 __tests__情况下,还需要在 .forceIgnore维护相关名称,为了统合,建议都起这个目录名称。 ? ?...test是基于本地端运行,所以很快,在vs code,我们只要方法中点击run test即可运行当前方法。...这种方式创建 jest test和上面还是有很大区别,接下来进行一下扩展,看一下场景lwc js应该如何写 jest test。...总结: Jest Test不止应用在 lwc,其他正常 javascript也可以,lwc顶多封装了一些自己用方式去扩展了操作,大部分断言验证操作还是使用标准Jest,所以小伙伴如果项目中如果需要使用

    1.1K30

    Vue 应用单元测试策略与实践 01 - 前言和目标

    在 Vue 应用单元测试,对 UI 组件和 vuex store 等测试区别有何不同?颗粒度该细到什么程度?...阅读和练习本文Jest部分 // Then 他能够把Given/When/Then套路学会 他能够学会Jest基本用法,包括测试suite和断言等语法 他能够学会Jest测试异步几种方式 2...在 Vue 应用单元测试,对 UI 组件和 vuex store 等测试区别有何不同?颗粒度该细到什么程度? // Given 一个有基本UT知识但没写过Vue测试新人?...`Redux-like` 架构好处 他能够合理测试vuex storemutation和getter业务逻辑 他能够测试组件如何正确dispatch action以及action如何做异步操作...最后,总结一下 Jest Jest 作为一个测试框架,其最大特点就在于它是一个非常有效解决方案,不需要与其他测试库交互来执行它工作。

    88140
    领券