Заглушить сокет клиента с помощью sinon
Я пытаюсь заглушить сокет-клиент-клиент для отправки событий на сервер-сокет.
я продолжаю получать ошибку ниже от 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);
})
})
функцию соединения обычно нужно вызывать с аргументом, определяющим порт io.connect({порт:4000})
как мне заглушить это с помощью sinon?
в идеале я хотел бы отправлять события из заглушки, чтобы проверить мой ответ сервера
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-сервер после завершения тестов)