讲师中心 微信公众号
AI工具推荐 视频效率加速

前端组件测试中 JS 怎么 Mock 模拟父组件事件触发

浅宇小哥_5890

浅宇小哥_5890

发布时间:2026-10-31 12:54:16

|

257人浏览过

|

来源于php中文网

原创

前端组件测试中Mock父组件事件触发的核心是手动构造事件发射环境,通过mount传入jest.fn()函数模拟v-on绑定的回调,并用wrapper.emitted()或props函数验证子组件是否正确调用emit或触发事件。

前端组件测试中 js 怎么 mock 模拟父组件事件触发

在前端组件测试中,Mock 父组件事件触发的核心思路是:**不依赖真实父组件,而是手动构造事件发射环境,让子组件能接收并响应 `emit` 或 `props` 传入的函数**。Vue 测试中(尤其 Vue 3 + `<script setup>`),重点在于模拟父组件通过 `v-on` 绑定的事件回调,以及验证子组件是否正确调用了这些回调。</script>

用 mount 配置 props 函数实现事件监听模拟

子组件通常通过 `defineEmits` 声明事件,而父组件用 `@xxx="handler"` 监听。测试时,我们反向操作——把一个 jest mock 函数作为 prop 传入,代替父组件的 handler:

  • 在 `mount()` 选项中,通过 `props` 传入一个已 `jest.fn()` 的函数,对应子组件 emit 的事件名(如 `'send'`)
  • 触发子组件内部动作(如点击按钮),检查该 mock 函数是否被调用、调用次数、参数是否正确

示例(基于你提供的代码):

// 测试 addTodo 按钮是否正确 emit 'send'

立即学习“前端免费学习笔记(深入)”;

const wrapper = mount(YourComponent, {

  props: {

    msg: '1234',

    onSend: jest.fn() // 注意命名要匹配 v-on:send="..." 的写法

  }

})

Expanso json-flatten
Expanso json-flatten

通过 CLI 或 MCP 服务器,使用 Expanso Edge 管道扁平化嵌套 JSON 对象。

下载

await wrapper.find('.add-todo').trigger('click')

expect(wrapper.vm.$props.onSend).toHaveBeenCalledWith('todo内容')

处理 defineEmits + $emit 场景(推荐 Vue Test Utils 4+)

若子组件使用 `const emit = defineEmits(['send'])` 并显式调用 `emit('send', value)`,测试中无需 mock emit 本身(VTU 自动提供),只需验证它是否被调用:

  • 直接访问 `wrapper.emitted()` 获取所有已触发事件的历史记录
  • `wrapper.emitted().send` 返回数组,每个元素是某次调用的参数列表
  • 配合 `await flushPromises()` 或 `await nextTick()` 处理异步 emit

例如:

await wrapper.find('.add-todo').trigger('click')

await nextTick()

expect(wrapper.emitted().send).toHaveLength(1)

expect(wrapper.emitted().send[0]).toEqual(['新 todo'])

模拟父组件的响应式 props 变更触发子组件更新

有些子组件行为依赖父组件传入的 props 变化(比如 `v-model:xxx` 或 watch props)。这时需主动修改 wrapper 的 props 并触发更新:

  • 用 `wrapper.setProps({ msg: 'new value' })` 模拟父组件更新 props
  • 搭配 `await nextTick()` 等待 DOM 更新,再断言子组件渲染结果
  • 若子组件内有 `watch` 监听该 prop,也会被触发执行

避免常见误区

不要试图 mock `defineEmits` 或重写 `$emit` 方法——VTU 已封装好;也不要手动 new 一个父组件实例去挂载子组件,这违背单元测试“隔离性”原则。真正需要 mock 的,永远是 **父组件对子组件的输入(props 函数)和外部依赖(如 axios、localStorage)**,而非子组件自身的逻辑出口。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2763

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

6003

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6950

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

6718

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

963

2024.05.22

js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

5426

2023.06.20

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

1329

2023.07.04

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

5364

2023.07.04

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

60

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.4万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn