如何进行单位测试和在WS库中的Typescript Websocket中进行模拟?

问题描述 投票:0回答:1
Provider.ts

import WebSocket from 'ws'; class Provider { async listen(onNewData: (data: any) => void) { ws.on('open', () => { const subscriptionMessage = JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'pricesSubscribe', }); ws.send(subscriptionMessage); }); ws.on('message', message => { const data = JSON.parse(message.toString()); console.log('message',data); onNewData(data); }); } }

我想写一个测试

用来称
.on('open')
被称为

    JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'pricesSubscribe', })
  1. 我亲自发送消息,该消息已收到
    on('message')
我想断言
newData
    callback用适当的参数调用
  1. 	
  2. 使用
  3. mock-socket
  4. const {Server} = await import('mock-socket'); class ChatApp { constructor(url) { this.messages = []; this.connection = new WebSocket(url); this.connection.onmessage = event => { this.messages.push(event.data); }; } sendMessage(message) { this.connection.send(message); } static connect(url) { const chatApp = new ChatApp(url); return new Promise((resolve, reject) => { chatApp.connection.addEventListener('open', () => { resolve(chatApp); }); chatApp.connection.addEventListener('error', err => { reject(err); }); }); } } function sleep(delay) { return new Promise(resolve => setTimeout(resolve, delay)); } async function run() { console.log('Init server...'); const fakeURL = 'ws://localhost:8080'; const mockServer = new Server(fakeURL); mockServer.on('connection', async socket => { socket.on('message', message => { console.log(`received message from socket`); const {jsonrpc, id, method} = JSON.parse(message.toString()); console.log(`Received: jsonrpc=${jsonrpc}, id=${id}, method=${method}`); }); }); const app = await ChatApp.connect(fakeURL); const subscriptionMessage = JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'pricesSubscribe', }); app.sendMessage(subscriptionMessage); // NOTE: this line creates a micro task await sleep(100); console.log(`Stop server`); mockServer.stop(); } run();
typescript websocket jestjs mocking ws
1个回答
0
投票

Init server... received message from socket Received: jsonrpc=2.0, id=1, method=pricesSubscribe Stop server

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.