Reputation: 101
I need to write unit test using sinon to web socket client. the code is as following:
Socket = {
connect: function ()
{
socket = new WebSocket('ws://localhost:12345');
socket.onopen = function()
{
console.log('connected to the server');
};
socket.onmessage = function(message)
{
console.log('Received:', message.data);
};
}
};
Upvotes: 3
Views: 6066
Reputation: 102257
We need return the socket instance at last in the connect
method. Because you assigned two new functions to onopen
and onmessage
events. It will override the spy
or stub
methods on the socket object.
Test environment: Node
Here is the unit test solution:
index.js
:
const Socket = {
connect: function() {
socket = new WebSocket("ws://localhost:12345");
socket.onopen = function() {
console.log("connected to the server");
};
socket.onmessage = function(message) {
console.log("Received:", message.data);
};
return socket;
}
};
module.exports = Socket;
index.spec.js
:
const sinon = require("sinon");
const { expect } = require("chai");
const Socket = require("./index");
class WebSocket {
constructor(uri) {}
onopen() {}
onmessage() {}
}
global.WebSocket = WebSocket;
describe("17806481", () => {
it("should test connect correctly", () => {
const logSpy = sinon.spy(console, "log");
const socket = Socket.connect();
const onopenSpy = sinon.spy(socket, "onopen");
const onmessageSpy = sinon.spy(socket, "onmessage");
onopenSpy();
expect(logSpy.firstCall.calledWith("connected to the server")).to.be.true;
const mMessage = { data: "fake data" };
onmessageSpy(mMessage);
expect(logSpy.secondCall.calledWith("Received:", mMessage.data)).to.be.true;
});
});
Unit test result with 100% coverage for Socket
module:
17806481
connected to the server
Received: fake data
✓ should test connect correctly
1 passing (10ms)
---------------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
---------------|----------|----------|----------|----------|-------------------|
All files | 100 | 100 | 75 | 100 | |
index.js | 100 | 100 | 100 | 100 | |
index.spec.js | 100 | 100 | 60 | 100 | |
---------------|----------|----------|----------|----------|-------------------|
Source code: https://github.com/mrdulin/mocha-chai-sinon-codelab/tree/master/src/stackoverflow/17806481
Upvotes: 1