標準構成で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 テストを書き始めましたが、websocket の処理方法がわかりません。
すべてのテストで再利用する websocket 接続を 1 つだけにしたいのですが、最初のメッセージの後に websocket 接続をユーザーセッションにバインドしています。その永続性もテストしたいと思います。
ws クライアントの onmessage イベントをどのように利用し、テストで利用するのですか? テストでは、受信したメッセージをどのように区別し、どのメッセージを待つべきかを知ることができますか?