如何在节点socket.io处理程序中测试逻辑

时间:2018-11-20 13:25:27

标签: node.js express testing socket.io mocha

我有一个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客户端

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测试,这些测试断言当套接字连接到服务器时它将获取最新数据,并且当套接字连接到服务器时,附加套接字的数量将依此类推。

但是,我无法找到合适的方法来编写这些测试。我意识到我可以将处理程序逻辑提取到模块中并进行隔离测试,但是我真的很希望测试能够真正在事件处理程序中运行。

我是否应该实际上在测试中启动服务器并连接套接字?有没有方法可以连接模拟套接字并以某种方式触发observedisconnect事件,从而在处理程序中行使逻辑。

我已经在SO上查看了类似的问题和答案,但到目前为止,它们并没有真正帮助我。

0 个答案:

没有答案