使用sinon来阻塞套接字客户端

时间:2016-05-04 13:13:26

标签: websocket socket.io mocha sinon socketcluster

我正在尝试存根socketcluster-client以向socketserver发送事件。

我一直从sinon得到以下错误

 TypeError: socket.emit is not a function

这是我的测试套件

import {expect} from 'chai';
import sinon from 'sinon'
import io from 'socketcluster-client';
import testServer from '../../server/server.js';

describe('httpServer',() => {


  beforeEach(() => {
    testServer(4000)
  })

  it('should respond to the ping event',() => {
    var socket =sinon.stub(io,'connect')

    var message = 'house'
    socket.emit('ping',message);
  })

})

通常需要使用指定端口的参数来调用connect函数 io.connect({端口:4000})

我如何用sinon存根?

我最好从存根发出事件以检查我的服务器响应

1 个答案:

答案 0 :(得分:1)

您想使用sinon.spy(),而不是sinon.stub()。前者将调用原始函数,后者将赢得“

”。

引自the documentation

  

使用存根包装现有函数时,不会调用原始函数。

您还需要确保实际上也称它为当前代码似乎没有做到的。

编辑:根据您的评论,在我看来,您要做的就是运行客户端,向服务器发送一些消息,并检查服务器是否正确响应。你不需要间谍/存根。

我不知道socketcluster,但要了解如何实施,以下是使用简单HTTP服务器的示例:

describe('httpServer', () => {

  before((done) => {
    http.createServer((req, res) => {
      res.end(req.url === '/ping' ? 'PONG' : 'HELLO WORLD');
    }).listen(4000, done);
  });

  it('should respond to the ping event', (done) => {

    http.get('http://localhost:4000/ping', (res) => {
      let buffers = [];

      res.on('data', (d) => buffers.push(d))
         .on('end', () => {
           let body = Buffer.concat(buffers);
           expect(body.toString()).to.equal('PONG');
           done();
         });
    });

  });
});

(它是一个最小的例子,因为它不会检查错误或在测试完成后清理HTTP服务器)