【问题标题】:Multiple Asynchronous Socket response handling using Mocha使用 Mocha 处理多个异步 Socket 响应
【发布时间】:2015-09-08 17:34:27
【问题描述】:

我正在尝试使用 Mocha 和 should.js 对套接字交互的负载测试场景进行原型设计。我有一系列用户详细信息,我想使用套接字通信对其进行身份验证并希望验证他们的响应。它适用于单个用户,但是当我尝试为多个用户循环时 - 我最终遇到了问题。根据帖子收集了一些输入:Tests from looping through async JavaScript (Mocha)

下面是代码sn-p:

var users = [{name:'A',password:'password',expected:'success'},{name:'B',password:'badPass',expected:'failure'}];
describe('socket Interaction test' , function() {
    function socketInteraction(users, done) {
        client.emit('userAuthentication', {'name':users.name,'password':users.password}, function(callback) {
            console.log('Emit' + users.name);
        });

        client.on('userAuthenticationResponse', function(response) {
            console.log('Resp' + response.status + 'Expected' + users.expected);
            response.status.should.equal(users.expected);
            done();
        });
    }

    it('Dummy', function(done) {
        describe('Mutiple login Test Async', function() {
            it('User Login Test', function(done) {
                users.forEach(function(users, callback) {
                    console.log(users.name);
                    socketInteraction(users, function(err) {
                        if (err) {
                            return;
                        }
                        done();
                    });
                });
            });
        });
    });
});

我在运行测试时得到的响应是:

 socket Interaction test
    ✓ Dummy
  Mutiple login Test Async
A
B
RespsuccessExpectedsuccess
    ✓ User Login Test
RespsuccessExpectedfailure
  2 passing (43ms)

第二次测试必须失败。不知道我在哪里弄乱了代码。感谢一些解决此问题的建议。谢谢。

【问题讨论】:

    标签: node.js sockets mocha.js should.js


    【解决方案1】:

    done Parma 应该在 async.forEach 的第二个参数中调用。你在循环函数中调用的 done 应该是 callback(),告诉 async 那个用户已经完成了。 您根本还没有异步完成的回调。

    会发布代码,但我在手机上。不清楚可以稍后补充。

    【讨论】:

    • 我确实尝试将 done 添加为第二个参数,并包含对回调的调用而不是 done()。它导致了一系列新问题。如果您能更详细地概述更改,请不胜感激。谢谢。
    • 我看到的另一件事是您将 describe() 和 it() 混合了一点。你应该让 describe's 成为它的包装器。并且不要将 it() 放在另一个 it 中。您覆盖了外部它已完成的功能,因此测试永远不会完成。如果您发现更多问题,请使用新代码进行更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 2015-10-23
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 2017-05-09
    • 2018-09-03
    相关资源
    最近更新 更多