最实用方案是使用 mock-socket 库接管 WebSocket 构造函数,通过 new Server('ws://...') 拦截连接,用 socket.send() 推送消息、socket.close() 模拟断连,并在测试后调用 server.close() 清理资源。

在 JS 项目中模拟 WebSocket 消息推送,不能靠 Mock.js(它只拦截 HTTP 请求),必须替换或接管原生 WebSocket 构造函数。最实用、稳定、开箱即用的方案是使用 mock-socket 库——它会自动拦截所有 new WebSocket(url) 调用,并让你完全控制连接、收发、断开等行为。
安装并初始化 mock-socket 服务器
只需三步:
- 安装:运行
npm install mock-socket --save-dev - 在测试入口(如
setupTests.js或beforeAll)中创建模拟服务端:
const server = new Server('ws://localhost:8080');
注意:客户端代码里连接的 URL(如 new WebSocket('ws://localhost:8080'))必须和 Server 初始化地址**完全一致**(协议、host、port、path 都要匹配)。
监听连接并模拟消息推送
通过 server.on('connection', socket => {...}) 拦截每个新连接,然后主动调用 socket.send() 向前端推送消息:
- 发送普通文本:
socket.send('hello from mock server') - 发送 JSON 数据:
socket.send(JSON.stringify({ type: 'update', data: { value: 42 } })) - 模拟定时推送:用
setInterval每秒发一次状态更新
前端只要正常绑定 ws.onmessage = e => {...},就能收到这些模拟消息,无需任何修改。
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
触发连接异常与关闭场景
真实环境中的错误逻辑(如网络中断、服务端静默断连)很难稳定复现,mock-socket 提供了明确的控制方式:
- 模拟服务端主动断连:
socket.close(1001, 'Simulated disconnect')→ 触发前端onclose - 触发错误事件:
socket.send(new ArrayBuffer(0))(部分浏览器下触发onerror) - 不发消息直接断连 → 模拟“服务端无响应”场景
这些操作能覆盖前端常见的重连、降级、loading 状态切换等逻辑验证。
清理与多实例隔离
每个测试用例结束后建议清理资源:
- 调用
server.close()关闭所有连接,避免状态污染 - 多个
new WebSocket()实例会各自建立独立连接,互不干扰,适合并发测试 - 若需禁用自动全局替换(例如只想局部 mock),创建 Server 时加
{ mock: false },再手动赋值window.WebSocket = MockWebSocket
不复杂但容易忽略。

















