You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在E2E测试中发送无引号的WebSocket初始化消息?

解决WebSocket发送无引号初始化消息的问题

方案1:调整RxJS发送逻辑,绕过自动序列化

RxJS的WebSocket客户端默认会对发送数据做JSON序列化,导致字符串被包裹引号。你可以通过发送Blob或直接使用原生WebSocket API结合RxJS,手动控制消息格式:

import { fromEvent } from 'rxjs';
import { map } from 'rxjs/operators';

// 直接创建原生WebSocket实例
const socket = new WebSocket('ws://你的后端地址');

// 监听连接打开事件,发送无引号的初始化消息
fromEvent(socket, 'open').subscribe(() => {
  socket.send('2probe');
});

// 监听后端返回消息
fromEvent(socket, 'message').pipe(map(event => event.data)).subscribe(data => {
  if (data === '3probe') {
    // 连接建立成功,继续发送后续消息
    socket.send('5');
    socket.send('3');
  }
});

也可以用RxJS的webSocket结合Blob发送:

import { webSocket } from 'rxjs/webSocket';

const socket$ = webSocket('ws://你的后端地址');
socket$.next(new Blob(['2probe'], { type: 'text/plain' }));

方案2:直接使用原生WebSocket API

如果不需要RxJS的响应式特性,原生API是最直接的解决方案,完全控制消息内容:

const socket = new WebSocket('ws://你的后端地址');

socket.onopen = () => {
  socket.send('2probe'); // 直接发送无引号字符串
};

socket.onmessage = (event) => {
  if (event.data === '3probe') {
    socket.send('5');
    socket.send('3');
  }
};

方案3:配置nuxt-socket-io禁用自动序列化

如果要在测试中继续使用nuxt-socket-io,可在配置中关闭自动JSON序列化,让消息以原始字符串发送:

// nuxt.config.js 或测试环境配置文件
export default {
  io: {
    sockets: {
      default: {
        url: 'ws://你的后端地址',
        options: {
          parser: {
            encode: (data) => data, // 直接返回原始数据,不做序列化
            decode: (data) => data
          }
        }
      }
    }
  }
};

之后在测试中直接发送字符串即可:

this.$socket.send('2probe');

内容的提问来源于stack exchange,提问作者Serhii Iliushenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 01:15:56