Подключение фальшивого клиента к модулю ws WebSocket - PullRequest
0 голосов
/ 21 октября 2018

Итак, у меня есть оболочка 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 });

  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...