Образец узла с веб-розетками - PullRequest
2 голосов
/ 25 декабря 2011

Я пытаюсь применить принципы TDD к приложению, используя node.js и nodeunit для модульного теста.Я изо всех сил пытаюсь создать контрольный пример, который может использовать веб-сокеты для проверки протокола связи приложения.

Я совсем новичок в TDD, так ли этот подход верен для TDD?

Знаете ли вы, где я могу найти образцы для этого?

РЕДАКТИРОВАТЬ: У меня есть рабочий образец.Однако у меня проблема в том, что сервер сам закрывается за 15 секунд.Я ценю отзывы об этом коде (это WIP).

file tests / websocket.js

var Server = require('../tests/server.js').Server;
var wsServer = new Server();

var ioclient = require("socket.io-client");

var testCase = require('nodeunit').testCase;

exports.server = testCase({

    setUp: function(callback) {

        wsServer.initialize();

        wsServer.addEvent('connection',function(socket){
            socket.on('ping',function(data){
                socket.emit('ping', { value: 'ok' });
                socket.disconnect();
            });
        });

        callback();
    },

    tearDown: function (callback) {
        wsServer.close();
        callback();
    },


    'ping test': function(test) {
        var clientsocket = ioclient.connect( 'http://localhost:' + wsServer.getPort() );
        clientsocket.on('ping', function(data){
            test.equal('ok', data.value);
            test.done();
        });

        clientsocket.emit('ping', { pingRequest: '1' });

    },

    'another ping test': function(test) {
        var clientsocket = ioclient.connect( 'http://localhost:' + wsServer.getPort() );
        clientsocket.on('ping', function(data){
            test.equal('ok', data.value);
            test.done();
        });

        clientsocket.emit('ping', { pingRequest: '1' });

    }


});

file test / server.js

function Server() {
    this.port = 3333;
}

Server.prototype.initialize = function () {
    this.create();
}

Server.prototype.getPort= function () {
    return this.port;
}

Server.prototype.addEvent = function (name, fn) {
    this.instance.sockets.on(name, fn);
}

Server.prototype.create = function () {
    var io = require("socket.io").listen(this.port, {'log level': 1});

    //io.sockets.on('connection',);
    this.instance = io;
}

Server.prototype.close = function () {
    this.port ++;
    this.instance.server.close();
}

exports.Server = Server;

1 Ответ

1 голос
/ 07 марта 2012

После прочтения Как правильно отключить socket.io / websocket-client? , я обнаружил, что добавление «тайм-аута закрытия» и «истечения срока хранения клиента» помогло мне решить аналогичную проблему с помощью сокета.io-клиент в тесте жасмин.На сервере добавьте следующие строки (в кофе):

app = module.exports = express.createServer()
io = require('socket.io').listen(app)
io.set 'close timeout', 0.2
io.set 'client store expiration', 0.2

Затем в клиенте добавьте следующие параметры («восстановить соединение» и «принудительно установить новое соединение»):

socket = io.connect('http://localhost:5555', {'reconnect': false, 'force new connection': true})
...