Синон: издевательские веб-розетки / WS - PullRequest
0 голосов
/ 29 мая 2018

Как я могу макет веб-сокетов / WS с помощью Sinon?Я пытаюсь проверить, что мое приложение работает должным образом при использовании WebSockets, без необходимости каждый раз подключаться (например, тестировать обработчики событий и т. Д.).

Исходя из фона C #, я просто высмеиваювесь интерфейс с использованием библиотеки, такой как Moq, а затем убедитесь, что мое приложение произвело ожидаемые вызовы.

Однако при попытке сделать это с помощью Sinon я сталкиваюсь с ошибками.

Пример теста:

const WebSocket = require('ws');
const sinon = require('sinon');
const webSocket = sinon.mock(WebSocket);
webSocket.expects('on').withArgs(sinon.match.any, sinon.match.any);
const subject = new MyClass(logger, webSocket);

Затем этот класс вызывает:

this._webSocket.on("open", () => {
    this.onWebSocketOpen();
});

Но когда я пытаюсь запустить свои тесты, я получаю эту ошибку:

TypeError: Attempted to wrap undefined property on as function

Как правильно подобрать объект, подобный этому, используяSinon?

Спасибо.

1 Ответ

0 голосов
/ 29 мая 2018

Если вы просто пытаетесь проверить, был ли вызван указанный метод "on" при работе с сокетами, вот как вы это сделаете:

my-class / index.js

class MyClass {
  constructor(socket) {
    this._socket = socket;

    this._socket.on('open', () => {
      //whatever...
    });
  };
};

module.exports = MyClass;

my-class / test / test.js

const chai = require('chai');
const expect = chai.expect;
const sinon = require('sinon');
const sinon_chai = require('sinon-chai');
const MyClass = require('../index.js');
const sb = sinon.sandbox.create();
chai.use(sinon_chai);

describe('MyClass', () => {
  describe('.constructor(socket)', () => {
    it('should call the .prototype.on method of the given socket\n \t' +
        'passing \'open\' as first param and some function as second param', () => {
      var socket = { on: (a,b) => {} };
      var stub = sb.stub(socket, 'on').returns('whatever');
      var inst = new MyClass(socket);
      expect(stub.firstCall.args[0]).to.equal('open');
      expect(typeof stub.firstCall.args[1] === 'function').to.equal(true);
    });
  });
});
...