首页
学习
活动
专区
工具
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.9K20
  • 使用 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.6K90

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

    transform: 设置哪些文件中的代码是需要被相应的转译器转换成 Jest 能识别的代码,Jest 默认是能识别 JS 代码的,其他语言,例如 Typescript、CSS 等都需要被转译。...Mock 介绍jest中的mock之前,我们先来思考一个问题:为什么要使用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!

    9510

    前端单元测试那些事

    ,在程序中的某个特定点该表达式值为真,判断代码的实际执行结果与预期结果是否一致,而断言库则是讲常用的方法封装起来 主流的断言库有 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.5K40

    别再用JSON配置文件了

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

    62430

    编写接口请求库单元测试与 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 并行测试中容易被占用。 测试用例也比较好写,只要按照传统前后端接口请求去写就可以了。

    1.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

    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 store的mutation和getter中的业务逻辑 他能够测试组件如何正确dispatch action以及action中如何做异步操作...最后,总结一下 Jest Jest 作为一个测试框架,其最大的特点就在于它是一个非常有效的解决方案,不需要与其他测试库交互来执行它的工作。

    89340

    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
    领券