在 javascript 单元测试中 mock 富文本编辑器图片上传超限错误,需拦截上传钩子(如 quill/wangeditor/tinymce 的自定义上传配置)、mock fetch/xhr 返回 413 错误、伪造超限 file 对象触发插入流程,并断言错误提示、图片未插入及状态重置。

在 JavaScript 单元测试中 Mock 富文本编辑器(如 quill、tinymce 或 wangeditor)的图片上传大小超限错误,核心是**拦截上传行为,模拟后端返回 400/500 错误或特定提示**,而非真实发起请求。关键在于控制「上传触发点」和「错误响应逻辑」。
拦截富文本的图片插入/上传钩子
多数富文本编辑器提供自定义上传入口,比如:
-
Quill:重写
ImageUploader或监听editor.getModule('toolbar').addHandler('image', handler) -
WangEditor:通过
editor.config.uploadImgServer = ''+editor.config.uploadImgHooks.fail控制失败逻辑 -
TinyMCE:配置
images_upload_handler返回 Promise.reject()
测试时可直接在初始化前 mock 这些配置项,让上传函数同步抛错或返回失败 Promise。
用 Jest Mock 原生 fetch / XMLHttpRequest
若编辑器底层用 fetch 或 XMLHttpRequest 上传图片,可在测试中全局 mock:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- Jest 中 mock
fetch并返回{ status: 413, statusText: 'Payload Too Large' }或自定义错误体 - 注意匹配上传 URL(如
/api/upload/image)和 FormData 中的文件字段名(如file),验证是否含大文件(blob.size > 5 * 1024 * 1024) - 示例:
global.fetch = jest.fn(() => Promise.resolve({ ok: false, status: 413 }))
伪造 File 对象并触发编辑器插入逻辑
测试需覆盖「用户选中超限图片 → 编辑器尝试上传 → 显示错误提示」全流程:
- 用
new File([new ArrayBuffer(6 * 1024 * 1024)], 'too-big.jpg', { type: 'image/jpeg' })创建超限文件 - 模拟
input[type="file"]的change事件,或调用编辑器的insertEmbed/uploadImage方法传入该文件 - 断言是否调用了错误提示函数(如
Message.error)、是否未插入图片节点、是否清空了临时 loading 状态
验证 UI 层错误反馈是否生效
Mock 不仅要让上传失败,还要确保业务逻辑正确响应:
- 检查是否显示了「图片大小不能超过 5MB」等提示文案(可查 DOM 文本或调用的提示方法参数)
- 确认图片未插入到编辑器内容中(
editor.root.innerHTML不含<img src="data:...">或临时占位符) - 若有 loading 状态,验证失败后是否重置(如
isUploading = false)
不复杂但容易忽略的是:必须清理 mock(jest.clearAllMocks())和还原编辑器实例,避免测试间污染。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










