我正在使用标准配置的sockjs。
var ws = sockjs.createServer();
ws.on('connection', function(conn) {
conn.on('data', function(message) {
wsParser.parse(conn, message)
});
conn.on('close', function() {
});
});
var server = http.createServer(app);
ws.installHandlers(server, {prefix:'/ws'});
server.listen(config.server.port, config.server.host);
wsParser.parse
函数的工作原理如下:
function(conn, message) {
(...)
switch(message.action) {
case "titleAutocomplete":
titleAutocomplete(conn, message.data);
break;
(...) // a lot more of these
}
在switch语句中调用的每个方法都会向客户端发送一条消息。
var titleAutocomplete = function(conn, data) {
redis.hgetall("titles:"+data.query, function(err, titles){
if(err) ERR(err);
if(titles) {
var response = JSON.stringify({"action": "titleAutocomplete", "data": {"titles": titles}});
conn.write(response);
}
})
};
现在我的问题是,我想为我的代码编写测试(迟早都要做的),但我不知道该如何做。我已经开始使用 mocha + supertest 编写普通的 http 测试,但我不知道如何处理 websockets。
我希望只有一个 websocket 连接可以在所有测试中重复使用。我将 websocket 连接与用户会话绑定在第一条消息后,并希望测试该持久性。
我该如何利用 ws 客户端的 onmessage 事件并在我的测试中使用它?测试如何区分接收到的消息并知道它们应该等待哪个消息?