Как проверить логику внутри обработчиков узла socket.io - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть сервер express.js, который использует базу данных для хранения.Клиенты могут читать и записывать данные через конечные точки http.Клиенты также могут прослушивать изменения данных через socket.io.

Мой урезанный код:

обработчики событий socket.io

export default (io, store, db) => {
io.on('connection', function(socket){
    socket.on('disconnect', function() {
        logger.log("Disconnect. Socket count: " + count)
        // logic which removes socket
    })
    socket.on('observe', function(json){
        logger.log("Observe " + collection)
        // logic which stores socket for later updates
        // logic which gets the current data from the database
        socket.emit('change', {theLatestData})
    })
})

}

socket.io client

var socket = io("http://localhost:8080")
socket.emit('observe', 'collectionName')
socket.on('change', function(data) {
    // logic which does something with the data
})

Конечная точка HTTP:

api.post('/collection/:collection', (req, res) => {
    // logic which adds some data to a collection in the db
    // logic which emits updates the attached sockets
})

Кажется, все работает хорошо, но в обработчиках событий отсутствует покрытие кода для логики.

Я хотел бы написать тесты mocha, которые утверждают, что когда сокет подключается к серверу, он получает последние данные, а когда сокет подключается к серверу, количество подключенных сокетов увеличивается и т. Д.

Однако я не могу найти подходящий подход для написания этих тестов.Я понимаю, что могу выделить логику обработчика в модули и протестировать их изолированно, но мне бы очень хотелось, чтобы тесты действительно выполнялись через обработчики событий.

Должен ли я фактически запустить сервер в тесте и подключить егосокет?Есть ли способ присоединить фиктивный сокет и каким-то образом вызвать события observe и disconnect, следовательно, используя логику в обработчиках.

Я смотрел на подобные вопросы и ответы на SO, но они непока мне очень не помогает.

...