2011-12-25 89 views
2

我试图将TDD原理应用于使用node.js和nodeunit进行单元测试的应用程序。我正在努力尝试创建一个能够使用websockets测试应用程序通信协议的测试用例。带网络套接字的Nodeunit示例

我对TDD相当陌生,所以,这种方法对于TDD是否正确?

你知道我在哪里可以找到样品吗?编辑: 我有一个工作示例。然而,我有问题,服务器需要15秒钟关闭它自己。我赞赏关于此代码的反馈(这是WIP)。

文件测试/ 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' }); 

    } 


}); 

文件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; 
+0

在这里发现了一个有趣的链接http://nullzzz.blogspot.com/2011/03/socketio-and-asynchronous-testing-with.html – Tk421 2011-12-25 10:25:35

回答

1

阅读How does one properly shutdown socket.io/websocket-client?后,我发现,加入 '亲密超时' 和 '客户端存储过期' 帮助我在jasmin测试中使用socket.io-client解决了类似的问题。在客户端然后

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})