Итак, у меня есть оболочка WebSocket, построенная вокруг модуля ws, и я пытаюсь создать набор тестов, но я не могу использовать WebSocket в традиционном смысле, так как для этого потребуется подключить его к веб-странице, поэтому я подумал, чтоможет «подделать» клиента и подключить его к ws WebSocketServer.
Однако я не могу понять, как добавить клиента на сервер, просто не добавив его в набор clients
, но тогда это нене вызывает wss.on('connection')
для клиента, и у меня есть пути кода, которые мне нужно проверить в этом.
Возможно ли использовать поддельный клиент с модулем ws или есть лучший способ сделать это?
ИСПЫТАНИЯ
const http = require('http').Server;
const chai = require('chai');
const WebSocketServer = require('../index');
const MockClient = require('./MockClient');
let app;
describe('The WebSocketServer should acknowledge new client has connected', () => {
beforeEach((done) => {
app = new WebSocketServer(http());
const mock1 = new MockClient();
done();
});
afterEach((done) => {
app = null;
done();
});
it('Should follow a code path in the connecting event (where the console.log placeholder is now)', (done) => {
done();
});
});
WebSocketServer.js
'use strict'
const WebSocket = require('ws').Server;
module.exports = class WebSocketServer {
constructor(server) {
this.server = server;
this.wss = new WebSocket({ server: this.server, clientTracking: true });
this.wss.on('connection', (ws, req) => {
console.log('client connected');
});
}
}
MockClient.js
'use strict'
const EventEmitter = require('events').EventEmitter;
module.exports = class MockClient extends EventEmitter {
constructor() {
super();
this.STATUS = {
CONNECTING: 0,
OPENED: 1,
CLOSED: 3
};
this.readyState = this.STATUS.CONNECTING;
this.messages = [];
}
send(message) {
this.messages.push(message);
this.emit('message', message);
}
open() {
this.readyState = this.STATUS.OPENED;
}
close(code, reason) {
this.readyState = this.STATUS.CLOSED;
this.emit('close', { closeCode: code, reason: reason });
}
}