在mochajs测试中,websocket onMessage只被调用一次

时间:2016-08-16 05:39:05

标签: unit-testing websocket mocha chai faye

// global
var ws = null;
var msgCount = 0;
var onMessageHandler = null;

// test #1 - this test passes successfully
describe('connect to wsserver test', function() {
    it('should successfully connect to wsserver', function(done) {
        this.timeout(0);

        ws = new FayeWebSocket.Client('wss://server.com', null, {
            headers: {
                "authToken": "someToken"
            }
        });
        ws.on('open', function() {
            done();
        });
        ws.on('message', function(msg) {
            if (onMessageHandler && typeof onMessageHandler === 'function') {
                onMessageHandler(msg);
            }
        });
        ws.on('close', function(event) {
            console.log('closing websocket!');
        });
        ws.on('error', function(err) {
            console.log("error!: " + err.message);
        });
    });
});

// test #2 - this test blocks indefinitely
describe('send request and get back 3 response messages', function() {
    it('should get back 3 response messages from the wsserver', function(done) {
        this.timeout(0);
        // this function is called ONLY once, although the server is sending 3 messages
        onMessageHandler = function(msg) {
            msgCount++;
            console.log(msg);
            if (msgCount >= 3) {
                done();
            }
        }

        var sendThisRequest = {
            'some': 'json',
            'with': 'some key/value pairs'
        }

        // this line sends a request to the wsserver
        ws.send(JSON.stringify(sendMsg));
    });
});

我正在尝试编写一些基本的单元测试来测试我的websocket apis。这些mocha测试模拟客户端,而不是websocket服务器。

  1. 在第一个测试中,我只是使用websocket连接到websocket服务器,此测试成功通过。
  2. 在第二个测试中,我向服务器发送请求(来自ws.send(消息)),服务器确实正确获取此请求,进行一些处理并发送 3 websocket消息到客户端。 (查看服务器日志,我可以说这部分在服务器上工作正常)
  3. 测试应该在收到3条消息后完成,有些期望(某事).to.equal(something)assertions
  4. 到目前为止,我还没弄清楚为什么第二条和第三条消息永远不会被onMessageHandler()接收。我已经尝试将ws.on('message',function(msg){..})块放在代码中的不同位置,但无济于事。
  5. 如果有人能指出我正确的方向来解决这个问题,那就太棒了。感谢

2 个答案:

答案 0 :(得分:0)

我认为你无法使用当前的mocha单元测试来进行数据流传输。

ws.send(JSON.stringify(sendMsg));

您只调用此语句一次,这意味着只传输一次数据。您需要多次调用它来检查n time streaming

答案 1 :(得分:0)

此代码正常运行。我传递给服务器的输入存在一些问题。遗憾!