测试mocha中的预期超时

时间:2013-07-15 05:03:56

标签: node.js mocha

我有一个Faye发布/订阅服务器,只有在消息已经发送给其他订阅者时才向新订阅者发送消息。我正在使用mocha进行单元测试。

此测试用于确认基本功能:

    it('should send a special message to new subscribers', function(done){
        testerPubSub.setLastJsonContent('some arbitrary content');
        var subscription = client.subscribe("/info", function(message) {
            assert.equal(true, message.text.indexOf('some arbitrary content') !== -1, 'new subscriber message not sent');
            done();
        });
        subscription.cancel();
    });

但我现在想测试一下没有向之前订阅者发送消息的情况。这个测试类似于:

    it('should not send a special message to new subscribers if no data has been retrieved', function(done){
        testerPubSub.setLastJsonContent(null);
        var messageReceived = false;
        var subscription = client.subscribe("/sales", function(message) {
            messageReceived = true;
        });

        ////need to magically wait 2 seconds here for the subscription callback to timeout

        assert.equal(false, messageRecieved, 'new subscriber message received');
        subscription.cancel;
        done();
    });

当然,神奇的睡眠功能是有问题的。有没有更好的方法来做这种“我希望回调永远不会被解雇”的测试?

谢谢, 麦克

1 个答案:

答案 0 :(得分:0)

我想到了一个可能的解决方案,但是我有点过于依赖时间来将其视为解决方案:

    it('should not send a special message to new subscribers if no data has been retrieved', function(done){
        testerPubSub.setLastJsonContent(null);
        var messageReceived = false;
        var subscription = client.subscribe("/sales", function(message) {
            assert.fail(message.text, '', 'Should not get message', '=');
        });
        setTimeout(function(){
            done();
        }, 1500);

        subscription.cancel;
    });

这个测试通过,但1500毫秒暂停似乎相当随意。我真的说“在我认为它会超时之前,跳进来说它没问题。”