jest+vue-test-utils测试设置了lodash.debounce的函数

Vue组件测试实战:Jest+Vue Test Utils工程化落地指南 Vue组件测试是保障单页应用质量的核心环节,其本质是通过自动化手段验证组件在不同输入(Props)、输出(Events)和渲染状态下的行为一致性。Jest作为JavaScript生态主流的testing framework,凭借可预测、可重复、可隔离的执行模型,成为Vue 3项目默认的单元与集成测试基础设施。结合Vue Test Utils,它能深度适配Composition API、响应式系统及provide/inject等机制,解决防抖、异步加载、Pinia状态模拟等高频痛点。从零配置环境到覆盖边界场景 阅读详情
使用jest测试vue组件中设置了debounce的函数

代码中用到了lodash.debounce来避免一些高频操作导致的函数在短时间内被反复执行,需要测试函数中包含的接口及参数。待测试代码如下:

// MyVueComponent.vue
import _ from 'lodash'
getPrice: _.debounce(function() {
      myApi
        .calculateApi({
          params: {
            key1: value1
          },
          data: {
            params: {
              key2: value2
            }
          }
        })
        .then(response => {
          this.price = response.data.priceKey
        })
    }, 300)

需要测试下调用this.getPrice()函数的时候,myApi.calculateApi接口被正确调用。
踩了好多坑之后,有2种方法可测试成功。

1.借助mockdate插件,mock当前时间。

通过修改当前时间,达到定时设置时间,从而调用对应函数。

// MyVueComponent.spec.js
function getComponent(options = {}) {
  return shallowMount(
    MyVueComponent,
    extend(
      true,
      {
        propsData: {
          props1: value1 
        },
        store
      },
      options
    )
  )
}

let fakePriceApi
beforeAll(() => {
  fakeApi = jest.spyOn(myApi, 'calculateApi').mockResolvedValue({data: {result: {}}})
})
// MockDate is used to be change when now is.
import MockDate from 'mockdate'
function fastforward(time) {
  let now = Date.now() + time
  MockDate.set(now)
  jest.runTimersToTime(time)
}

describe('获取价格接口正确调用', () => {
  beforeEach(() => {
    jest.useFakeTimers()
  })
  afterEach(() => {
    jest.clearAllTimers()
  })
  it('影响价格的因素短时间内变化多次时,接口只会调用一次', () => {
    let wrapper = getComponent()
    wrapper.vm.getPrice()
    wrapper.vm.getPrice()
    wrapper.vm.getPrice()
    fastforward(50) // 第 50 ms时,接口未被调用
    expect(fakeApi).not.toHaveBeenCalled()
    fastforward(200) // 第 250 ms 时,接口被调用
    expect(fakeApi).toHaveBeenCalledTimes(1)
  })
  it('查询价格接口调用正确', () => {
    let wrapper = getComponent({
      propsData: {
        xxxx: 'aaaaa'
      }
    })
    wrapper.vm.getPrice()
    fastforward(250)    // 第 250 ms
    expect(fakeApi).toHaveBeenCalledWith(
      expect.objectContaining({
        params: {
          key1: value1
        },
        data: {
          params: expect.objectContaining({
            key2: value2
          })
        }
      })
    )
  })
})
2. 将debounce mock为立即执行的函数

不去验证getPrice是否会被debounce,因为debounce是第三方模块的方法,我们默认认为是正确的,我们要验证的是getPrice能够正确触发方法, 函数内部的接口能被正确调用即可。

// 通过mock将lodash的debounce修改为立即执行的函数
jest.mock('lodash/debounce', () => jest.fn(fn => fn))

只需添加一行mock代码,即可测试通过。

踩坑记录
  1. 方法1不使用mockdate,而是使用jest.runOnlyPendingTimers()。测试时,接口不能被成功调用。在查了许多资料后,这可能是lodash的debounce机制与jest的timer-mocks 无法兼容。

参考文献:

  • https://blog.youkuaiyun.com/duola8789/article/details/80434962
  • https://www.jianshu.com/p/c5d45306d374
  • https://blog.youkuaiyun.com/TMQ1225/article/details/81133855
Vue+ElementUI封装TreeSelect下拉树组件:实现树形数据选择与模糊搜索 在前端开发中,表单选择器是高频使用的交互组件,其核心原理是将用户选择的数据项与表单值进行绑定。传统下拉选择器(Select)在处理一维列表时表现良好,但当面对具有层级关系的树形数据结构(如组织架构、商品分类)时,用户体验会急剧下降。为了解决这一痛点,其技术价值在于通过组件化思维,将成熟的下拉框(Select)与树形控件(Tree)的能力进行深度融合,而非简单叠加。这涉及到事件通信、数据同步、搜索过滤算法等关键技术环节。在工程实践中,这种封装方式能显著提升中后台系统在特定应用场景下的操作效率,例如部门选择、地 阅读详情

相关推荐

Codex不是代码补全,而是工程协作者:重构人机编程关系

AI编程已从代码补全迈入工程协作新阶段。Codex作为首个能将自然语言意图直接转化为可运行、可测试、可交付工程产物的智能体,其核心在于系统级推理与上下文锚定能力,而非单纯语法生成。它依托GPT-5.5模型实现高任务完成率与长上下文理解,显著提升Token效率与端到端交付质量;通过本地化工作流、项目知识库配置和自定义任务模板,支持抗干扰、可复用、安全可控的开发实践。适用于Vue/React前端搭建、API集成、单元测试生成、Git协作增强等真实场景,真正让开发者从‘写代码’转向‘定义问题、验收结果’的高阶角色

aiqixiao2017的博客 469

vue jest单元测试

vue jest单元测试

letianxf的博客 2995

Cursor真实能力图谱:不止Agent,Tab补全与Ctrl+K才是日均主力

Cursor并非简单的AI代码补全工具,而是一套融合符号解析、AST重构与上下文感知的智能编程协作者系统。其核心能力源于多层执行模型——本地轻量模型支撑毫秒级Tab补全,云端中型模型驱动秒级Ctrl+K指令响应,Agent仅作为高延迟特种任务通道。技术价值体现在对TS/React项目深度集成、自动适配prettier/eslint/jest等工程配置,并通过语义缓存实现跨文件智能推断。典型应用场景包括类型安全补全、JSDoc批量生成、AST级函数重构及内联正则调试。本文聚焦被严重低估的Tab补全与Ctrl+

dfdfadsf3443的博客 421

在React中使用防抖节流

在React中使用防抖节流 防抖和节流 先来介绍一下防抖和节流 防抖:事件触发后延迟n秒在执行,如果在这n秒内再次触发则重新计时。即在一段时间内只允许事件执行一次,常用于表单提交,输入框防抖 节流:事件触发后延迟n秒在执行,并且在这n秒内再次触发事件时不允许执行。即减少一段时间内事件触发的频率,常用与监听滚动条滚动,鼠标移动,窗口大小变化 依据上面的定义可以手写一个防抖和节流 防抖: const debounce = (fn, delay) => { let timer return

m0_46430338的博客 3273

前端100道八股文+50道场景题

闭包是指一个函数能够访问它外部函数作用域中的变量,即使外部函数已经执行完毕。形成闭包需要三个条件:函数嵌套、内部函数引用外部变量、外部函数返回内部函数。闭包的主要作用有三个:第一,实现数据私有化。比如可以用闭包创建私有变量,外部无法直接访问,只能通过特定方法操作。第二,模块化。可以用闭包封装代码,只暴露需要的接口。第三,函数柯里化和防抖节流等高级技巧都会用到闭包。闭包的缺点是可能造成内存泄漏。因为闭包引用的外部变量不会被垃圾回收,如果大量使用闭包且不及时清理,会占用过多内存。

weixin_50762268的博客 1406

GitLens 7大核心用法:提升代码理解与协作效率

代码理解是软件开发中最基础也最易被忽视的能力,它依赖对变更历史、作者意图、上下文关联和影响范围的快速把握。Git 本身提供底层数据,但缺乏面向开发者认知的结构化呈现;GitLens 正是将 Git 原生信息转化为可感知、可操作、可协同的工程实践工具——通过行级 blame 追溯责任链、提交图谱实现时空导航、差异快照支持即时验证、作者热力图建立稳定性直觉、引用图谱发现影子依赖、智能提交补全沉淀团队认知、PR 协同评论打通评审闭环。这些能力共同构成一套嵌入编辑器的‘代码认知加速系统’,特别适用于中大型项目中的代

weixin_33701294的博客 366

使用指南:深入了解 `use-debounce`

`use-debounce` 是一个专为React设计的轻量级(< 1Kb)debounce钩子库。它提供了简单而高效的方法来实现值的延时处理和回调函数的防抖动,对于优化React应用中频繁触发的事件(如输入框监听、滚动事件)非常有用。该项目托管在GitHub上,由xnimorz维护,并遵循MIT许可证。 ## 目录结构及介绍 以下是`use-debounce`项目的主要目录结构: ```m

gitblog_00051的博客 458

JavaScript高手养成:从语言特性到运行环境的深度实践

JavaScript是一门在浏览器、Node.js及边缘设备中动态运行的脚本语言,其核心价值在于灵活应对真实业务场景中的性能瓶颈、内存泄漏与异步协同问题。理解JS不仅需要掌握语法,更需深入事件循环机制、V8引擎优化原理(如隐藏类、内联缓存)和内存模型(如闭包持引用、GC触发条件)。这些底层能力直接决定你在React useEffect依赖管理、Promise链错误兜底、WebSocket实时同步等高频场景中的调试效率与架构决策质量。本文聚焦JS三重生存环境——语言层的隐式转换陷阱、运行环境层的Event L

didi9310的博客 364

React 单元测试入门

不知道大家有没有看到过,一些网上流传的关于程序员写bug的段子:今天我们来聊聊怎么跳出这个斐波那契循环,通过单元测试的方式减少程序中bug的数量。注意一下用词是减少,不是消除,单测不是银弹,过分信任单测而不做集成测试可能导致如下后果: 很多同学不太理解为什么要做单元测试(上一个这样想的波音的外包同学已经把波音737搞坠毁了),在日常开发过程中,我们对待编写测试用例的态度大概是这样的:强调了一下单元测试的重要性,然后讲讲什么情况下要写单测,写单测要因情况而变: ● 公用组件库,底层SDK,基础部分程序,更新不

吴小迪的博客 1664

JavaScript立即执行函数的三种不同写法

第一种: (function () { // open IIFE // inside IIFE }()); // close IIFE 第二种: !function () { // open IIFE // inside IIFE }(); // close IIFE 第三种: void function () { // open IIFE // inside IIFE }(); // close IIFE

进阶数据结构——链式前向星

链式前向星是一种进阶的数据结构,主要用于图的存储。我希望大家先看这个视频(蓝色字体点进去) 不然你很难理解的。在图论中,图的存储方式主要有邻接矩阵和邻接表两种。邻接矩阵虽然建图简单方便,但占内存较大,节点数量稍微大点的题目就难以使用(适合稠密图);而邻接表虽然节省空间,但其指针形式难写易错,且vector形式的读取速度较慢,易导致大数据下的超时(TLE)。针对上述问题,链式前向星作为一种折中的方式应运而生。链式前向星本质上是一种静态链表,它将数据以链表形式连接在一起。

ycs66的博客 2137

手把手教你实现一个防抖函数(debounce)

闭包不另开一篇文章讲解是讲不完的,并且阮一峰阮大的闭包讲解的已经很好了,我就不献丑了) 对于现在的场景简单来说,你可以这样理解。那么我们的 防抖 函数在这里的作用其实就是帮你把这个函数包装一下的意思,它并不会直接影响这个函数的内部逻辑,就像你的礼物包装一层包装纸🎁后,它本身是没有发生任何变化的。我仅仅只是想最后搜索 hanzhenfang 这几个关键词,但是我在输入每一个字符的时候,都会去后端请求一次,数据量小还好,如果数据量过大的话,由于前几次的请求都是毫无意义的,势必会造成性能和资源上的浪费。

fang_my的博客 6710

基于STM32、HAL库的ICP-20100气压传感器 驱动程序设计

它具有低功耗、高精度、快速响应等特点,非常适合物联网、可穿戴设备和无人机等应用。#define ICP20100_FIFO_CTRL 0x09 // FIFO控制寄存器。#define ICP20100_FIFO_DATA 0x0A // FIFO数据寄存器。#define ICP20100_FIFO_STS 0x0B // FIFO状态寄存器。#define ICP20100_FIFO_WTM 0x15 // FIFO水印设置。

corlin6688的博客 600

langchain-huggingface 集成包实战指南:从安装迁移到 Hugging Face 模型接入 LangChain

`langchain-huggingface` 是 LangChain 官方发布的 Hugging Face 集成包,封装了 Hugging Face 生态下的聊天模型、文本生成、文本嵌入等能力,让开发者可以在 LangChain 的统一接口(`invoke`、`stream`、`embed_documents` 等)下无缝使用 Hugging Face Hub、Inference Provide

gitblog_01144的博客 362

高项备考论文:规划绩效域

高项备考论文:规划绩效域

liuxu324的博客 1128

Matlab安装硬件支持包、simulink离线安装硬件支持包安装,离线安装ESP32、stm32等安装包,Are you up-to-date on SoftWare Maintenance?

注意:如果提示出现“没有可从此位置安装的兼容支持包后,这个问题,请查看步骤5,是不是没有按照步骤5进行操作.一般情况下出现“没有可从此位置安装的兼容支持包”后,重新安装选择了默认路径就可以成功。如果不是很清楚,直接安装在默认的文件夹下面,即使这个文件夹下没有matlab相关的文件夹,也要这么下载,没有为什么,切记尽量按默认路径安装,更改下载的路径不成功,别怪我没提醒。:下载到哪里非常重要,如果下载的不是默认的路径下,就需要将其中这个的是这个archives文件夹,连同其他文件一并要复制出来,拷贝到。

pvmsmfchcs的博客 1746

JavaScript函数编程:从基础到高阶实战指南

JavaScript函数是编程语言中的核心概念,它不仅是代码复用的基本单元,更是实现复杂业务逻辑的构建块。从基础的函数声明、表达式到ES6箭头函数,JavaScript提供了多种定义函数的方式。理解函数作用域、闭包原理以及this绑定机制是掌握函数编程的关键。在工程实践中,高阶函数、函数组合等技术可以显著提升代码的可维护性和复用性。特别是在前端开发领域,函数式编程思想与React Hooks、异步处理等热门技术深度结合,能够有效管理状态和副作用。通过记忆化、节流防抖等优化技巧,还能解决性能瓶颈问题。无论是表

weixin_30514745的博客 330

第一节:从Chat_Bot 到 AI_Agent——一个范式转换

本文系统剖析了工业级AI代理系统ClaudeCode的设计原理与工程实践。通过对比ChatBot与Agent的三个本质差异:自主循环决策vs单轮应答、环境交互vs纯文本I/O、持久状态管理vs无状态对话,揭示了构建生产级Agent系统的关键挑战。文章详细解析了ClaudeCode的五层架构设计、1800+文件组成的运行时系统,包括工具调度、权限管理、状态持久化等核心机制,并阐述了从简单API调用到完整Agent系统的演进路径。

2201_75869398的博客 68

Vue 完整版系统知识文档

《Vue全栈开发实战手册》摘要 本手册系统整合Vue2/Vue3全栈知识体系,涵盖基础语法、组件开发、状态管理、工程化等核心内容,适合从入门到精通的完整学习路径。主要特点: 基础核心 详解MVVM架构和响应式原理(Vue2的Object.defineProperty vs Vue3的Proxy) 完整模板语法规则与16种内置指令解析 组件系统核心:通信机制(8种方案)、插槽、动态组件、递归组件 进阶实战 状态管理:Vuex/Pinia完整解决方案 路由开发:动态路由、权限控制、懒加载 工程化:Webpack

专注 Java 后端开发,分享基础语法、JVM、并发、Spring 全家桶、微服务、分布式、性能优化等实战干货。坚持输出高质量技术笔记,用简单语言讲清复杂原理,助力每一位 Java 开发者稳步进阶。 402

硬件学习手册【总目录】

欢迎大家来到《硬件学习手册》,专栏主要包括 《硬件经验手册》《电子元器件器件手册》《PCB手册》《CPU手册》《元器件选型手册》五个分册。在开始专栏的更新前,博主先列出专栏的大纲,以供大家参考。大家直接点击大纲中的蓝色标题即可轻松传送。

fydar的博客 5853

YOLOv11 模型改进全流程:从代码修改到性能跃升,让你打造专属检测利器

无论是科研中需要发表创新点满满的论文,还是企业里要解决特定场景的检测难题,这套方法都能让你在YOLOv11的基础上打造出“量身定制”的检测模型。别再让通用模型的“平庸性能”限制你的项目上限——现在就动手修改代码,让你的YOLOv11模型在精度、速度或小样本适应能力上实现跨越式提升,用技术突破证明你的AI研发实力!本文将带你从代码层面入手,完成从骨干网络到损失函数的全维度改进,真正掌握让YOLOv11“为你所用”的技术实力。该改进对小样本类别(如数据集中仅占5%的“稀有缺陷”)的识别精度提升显著。

m0_71589036的博客 402

GLM-5.1开放:国产大模型从‘能写代码’迈向‘懂工程’

大模型代码生成已进入工程落地深水区,不再仅关注参数规模或通用基准测试分数,而是聚焦于真实研发场景中的语义理解、上下文感知与流程嵌入能力。以GLM-5.1为代表的新一代模型,通过项目级上下文绑定、错误反馈逆向工程、多阶段任务原子化拆解等技术,显著提升代码生成的准确性与可集成性;其与codingplan深度耦合带来的权限原生集成、状态机驱动生成和毫秒级反馈闭环,标志着AI编程正从‘辅助工具’升级为‘研发基础设施’。本文围绕工程语义理解与平台级开放实践,解析如何让大模型真正‘读懂你的项目’并‘嵌入你的CI/CD’

bk_lin的专栏 421

推荐系统(十六):基于ESMM的商品召回/推荐系统

ESMM(Entire Space Multi-Task Model)是阿里巴巴提出的多任务学习框架,通过联合建模点击率(CTR)和点击转化率(CVR)解决传统CVR模型样本稀疏问题。其核心思想是将 CVR 定义为 CTR 与 CTCVR 的条件概率,模型包含两个子任务。

Jin_Kwok的博客 1265

Vibe Coding实战:TRAE Solo如何重构人机协作开发范式

Vibe Coding是一种以语义锚点和上下文编织为核心的新一代AI编程范式,它超越传统代码补全,聚焦于开发前期的隐性决策链建模与协同执行。其技术原理在于融合项目上下文、领域知识图谱与任务动态状态,实现自然语言到可运行代码的端到端映射。相比Copilot类工具,Vibe Coding显著降低小团队与独立开发者的工程认知负荷,提升从设计稿、API文档到多语言交付的全流程效率。典型应用场景包括Figma一键转Vue组件、OpenAPI自动生成TypeScript类型与请求封装、错误日志驱动的精准修复等。本文深入

weixin_34186128的博客 418

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Kimi K2.6:专为前端开发者打造的智能编码协作者

前端开发正从手动编码迈向语义化协同编程。Kimi K2.6 以深度前端语境理解为核心,突破传统代码补全局限,实现跨文件、跨抽象层的上下文感知与类型推导。它将 HTML/CSS/JS 视为统一渲染生命周期信号,结合 TypeScript 类型系统、构建工具链(Vite/Rollup)和 UI 框架(React/Ant Design)进行原生建模,显著提升逻辑层穿透力与工程层兼容性。在真实项目中,它支撑组件生成、API 集成、表单校验、测试覆盖等全链路开发,并通过确定性解码保障输出一致性。其能力已深入到响应式类

weixin_33724659的博客 293

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Trae端到端AI编程:从需求到部署的工程范式升级

端到端开发是一种将需求分析、代码生成、测试验证与部署集成于一体的现代软件工程实践。其核心在于保持开发状态的连续性,消除传统工具链中意图断裂、上下文断裂与执行断裂三大瓶颈。借助深度工程意图理解与本地化模型微调,AI编程工具得以精准识别中文技术语义(如‘幂等’‘灰度开关’)并适配国内主流框架(Ant Design、Umi)。这种能力不仅提升单点编码效率,更支撑RBAC权限系统、物联网看板等真实业务模块的快速交付,实现从自然语言需求直达可运行、可调试、可部署产物的技术闭环。

aocaiti5781的博客 470

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: 使用echarts制作拓扑图
下一篇: 何时需要给router-view组件绑定 key
林雨静
博客等级 码龄10年 11粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值