我正在尝试存根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存根?
我最好从存根发出事件以检查我的服务器响应
答案 0 :(得分:1)
您想使用sinon.spy()
,而不是sinon.stub()
。前者将调用原始函数,后者将赢得“
使用存根包装现有函数时,不会调用原始函数。
您还需要确保实际上也称它为当前代码似乎没有做到的。
编辑:根据您的评论,在我看来,您要做的就是运行客户端,向服务器发送一些消息,并检查服务器是否正确响应。你不需要间谍/存根。
我不知道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服务器)