Javascript 如何编写测试websocket事件的代码?
我正在尝试测试在触发websocket事件后是否将数据添加到数据库中 在我正在使用的应用程序中,已经有一个这样的工作示例Javascript 如何编写测试websocket事件的代码?,javascript,websocket,mocha.js,assert,feathersjs,Javascript,Websocket,Mocha.js,Assert,Feathersjs,我正在尝试测试在触发websocket事件后是否将数据添加到数据库中 在我正在使用的应用程序中,已经有一个这样的工作示例 it('some test name', function (done) { this.timeout(12000) var socket = io.connect('http://localhost:3000', { 'transports': [ 'websocket', 'flashsocket',
it('some test name', function (done) {
this.timeout(12000)
var socket = io.connect('http://localhost:3000', {
'transports': [
'websocket',
'flashsocket',
'jsonp-polling',
'xhr-polling',
'htmlfile'
]
})
socket.emit('some-room-event', {
participant: 'p1',
room: 12,
active: true
})
setTimeout(function () {
app.service('rooms').get(12)
.then(function (room) {
assert(room.active === true)
socket.disconnect()
done()
}).catch(function (err) {
socket.disconnect()
done(err)
})
}, 11000)
})
我来自一个ruby的背景,并且正在进入这个项目,所以我是一个新手。这感觉有点像使用超时是一种代码味道,只是感觉不对。您不希望将运行测试所需的持续时间增加任意的等待时间
我已经读了很多关于这方面的文章,但它相当混乱。有没有更好的方法来构造此代码并潜在地消除setTimeout
我使用的是feathersjs、摩卡和assert 看起来正在测试的事件只是对
rooms
服务起作用的普通websocket事件
测试中的任意超时肯定不是解决websocket事件在完成其本应完成的操作时无法确认的问题的最佳方法。我认为您可以做的是在房间更新
或修补
(尽管套接字事件不仅仅使用官方的socket.emit('rooms::update',data)
来更新房间状态,这有点奇怪):
是的,我也觉得不对。当你是新手时,很难说服男人。谢谢,我不怀疑。但这并不意味着你错了。希望来自框架作者之一的输入有助于支持您:)
it('some test name', function (done) {
var socket = io.connect('http://localhost:3000', {
'transports': [
'websocket',
'flashsocket',
'jsonp-polling',
'xhr-polling',
'htmlfile'
]
});
app.service('rooms').once('updated', function(room) {
assert(room.active);
done();
});
socket.emit('some-room-event', {
participant: 'p1',
room: 12,
active: true
});
});