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',
})
我亲自发送消息,该消息已收到
on('message')
我想断言
newData
:
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();