【问题标题】:Mocha websocket tests do not fail/pass reliablyMocha websocket 测试不会可靠地失败/通过
【发布时间】:2013-10-19 23:15:15
【问题描述】:

我正在尝试使用 Mocha 为 websocket 演示编写一些简单的测试。我得到了非常不一致的结果。我有:

var socketURL = `http://0.0.0.0:8888`;
var options ={
  transports: ['websocket'], 'force new connection': true
};

describe("Login functions: ", function(){
    describe("tracks numbers correctly", function(){
        it('Adds users correctly:', function(){
            var bar = io.connect(socketURL, options);
            bar.on('joined', function(m){
                expect(m).to.have.length(10)
                bar.disconnect()
            })
        })
    })

    describe("adding guests", function(){
        it('New users should be guests', function(){
            var foo = io.connect(socketURL, options);
            foo.on('joined', function(members){
                expect(members).to.include('aaa')
                foo.disconnect()
            })
        });
    })
})

这两个测试都应该失败。如果我在新启动的节点服务器实例上运行它们,它们都会通过。如果我再运行它们几次,第一次最终会失败。

我尝试了几种不同的编码方式,以及几个断言库(首先是 should.js,然后是 chai 的 should(),现在是 chai 的 expect)。

【问题讨论】:

    标签: express websocket bdd mocha.js chai


    【解决方案1】:

    我认为你需要使用done,像这样:

       it('Adds users correctly:', function(done){
            var bar = io.connect(socketURL, options);
            bar.on('joined', function(m){
                expect(m).to.have.length(10)
                bar.disconnect()
                done()
            })
        })
    

    当您将done 作为参数时,测试不会结束,直到您调用done()。这在您使用异步回调时很重要。你无法保证它们何时被调用,所以现在可能 Mocha 认为测试已经完成,即使回调实际上还没有完成。

    测试可能仍然失败,但它应该始终如一地进行,除非它有一些不一致的依赖项。

    另请参阅:http://visionmedia.github.io/mocha/

    【讨论】:

    • 谢谢。我之前一直在使用 done() 回调,但在某个时候将其删除。重新添加它会使它们正确失败。
    猜你喜欢
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多