首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用websockets的Nodeunit示例

使用websockets的Nodeunit示例
EN

Stack Overflow用户
提问于 2011-12-25 14:22:55
回答 1查看 1.1K关注 0票数 2

我正在尝试将测试驱动开发原则应用于一个使用node.js和nodeunit进行单元测试的应用程序。我正在努力创建一个能够使用websockets来测试应用程序通信协议的测试用例。

我是TDD的新手,那么,这种方法对TDD正确吗?

你知道我在哪里可以找到样品吗?

编辑:我有一个工作样本。然而,我有一个问题,服务器自己花了15秒来关闭它。我很感谢对这段代码的反馈(这是WIP)。

文件测试/websocket.js

代码语言:javascript
复制
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

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

发布于 2012-03-07 14:33:05

在阅读了How does one properly shutdown socket.io / websocket-client?之后,我发现添加“关闭超时”和“客户端存储过期”帮助我在jasmin测试中使用socket.io-client解决了类似的问题。在服务器上,添加以下行(在咖啡中):

代码语言:javascript
复制
app = module.exports = express.createServer()
io = require('socket.io').listen(app)
io.set 'close timeout', 0.2
io.set 'client store expiration', 0.2

然后在客户端中添加这些参数('reconnect‘和'force new connection'):

代码语言:javascript
复制
socket = io.connect('http://localhost:5555', {'reconnect': false, 'force new connection': true})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8628490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档