首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Jest和react-testing库测试Websocket客户端

如何使用Jest和react-testing库测试Websocket客户端
EN

Stack Overflow用户
提问于 2019-11-29 16:29:08
回答 1查看 1.5K关注 0票数 7

我使用create-react-app、Jest和react-Jest library来配置聊天机器人项目。

例如,我有一个连接到WebSocket服务器的React功能组件,DOM会根据WebSocket消息进行更改

代码语言:javascript
复制
const LiveChat = () => {
  const [socket, setSocket] = useState(null)

   useEffect(() => {
    setSocket(new WebSocket('ws://localhost:1234'))
   }, [])

  useEffect(() => {
    socket && socket.onmessage = message => { handleAgentMessages(message.data) }
  }, [socket])

  const handleAgentMessages = message => {
     const { messageContent, messageType, secureKey } = JSON.parse(message)
     if (messageType === TEXT && messageContent) {
       alert(messageContent)
       playChatMessageSound()
     }
       ...
   }

   return (
      <div className='live-chat' data-testid='live-chat'>
          ...
      </div>
   )
}

我想测试一下,当一个短信来了,警报箱出现的内容等我通过互联网,我找到了jest-websocket-mock库,但似乎我需要模拟客户端以及这个库,但我只是想模拟服务器,并期望客户端连接模拟的WebSocket服务器,你有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2021-07-29 15:58:16

我不确定这是不是正确的方式。但这对我很管用,

代码语言:javascript
复制
    global.sendMsg = null;
    global.WebSocket = class extends WebSocket {
        constructor(url) {
            super("wss://test");
            global.sendMsg = null
        }
    
        addEventListener(event, cb) {
            if (event === "open") {
                cb();
            } else if(event === "message") {
                global.sendMsg = cb;
            }
        }
    };

    test("testing message",() => {
      render(<LiveChat />);
      global.sendMsg({data:"test-msg"});
 
      expect....
    })

基本上,我重写了WebSocket类并将消息事件回调存储为一个常量,并在测试中触发它以模拟服务器消息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59101239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档