README
socks-io
Your socks for the socket-io. Just a very simple non-blocking mocking lib, but useful if you don't care about the server and just want to test the clients interactions. Supports socket.on
, socket.emit
and socket.open
.
Contents
Installation
yarn add socks-io
or
npm i socks-io
Usage
In this example Session
is a class responsible for handling a client interactions we want to test. Let's add two clients to the server and let them interact with each other. To do so, we just need to mock the implementation of the socket-io connect
function, attach our clients and just run the tests. More below :)
import { connect as socketClient } from "socket.io-client";
import { Session } from "mySocketSessionHandler";
import { SocketServerMock, SocketClientMock } from "./socket.mock";
let COUNT = 0;
const SServer = new SocketServerMock(); //global server instance
// mock the connect(endpoint, socketConfig)
jest.spyOn(socketClient, "connect").mockImplementation(() => {
const _socketClientMock = new SocketClientMock(COUNT.toString(), SServer);
// we need to add a clients to the server so they can interact with each other
SServer.addClient(_socketClientMock);
COUNT++;
return _socketClientMock;
});
describe("Session", () => {
let user1Session;
let user2Session;
beforeEach(() => {
SServer.reset(); // isolate the tests
user1Session = new Session();
user2Session = new Session();
});
it("should fire the Example signal after we run the sessions", (done) => {
// wait for handleExampleSignal function to be called
jest.spyOn(user1Session, "handleExampleSignal").mockImplementation(() => {
done();
});
// start the sessions
user1Session.run();
user2Session.run();
});
it("should fire the YesSignal signal after the user1 ui interaction", (done) => {
jest.spyOn(user1Session, "openYesNoModal").mockImplementation(() => {
// mock the user interaction
user1Session.userAgreed();
user1Session.sendYesSignal();
});
jest.spyOn(user2Session, "onYesSignal").mockImplementation(() => {
done();
});
user1Session.run();
user2Session.run();
});
});
Notes
Emit socket.emit('/join', 'room)
to join a room, and SServer.rooms
to check who's inside.