摩卡网络套接字测试不会失败/可靠地通过



我正在尝试用 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()
            })
        });
    })
})

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

我已经尝试了几种不同的编码方法,以及几个断言库(首先是应该.js,然后是 chai 的 should(),现在是 chai 的期望)。

我认为您需要使用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/

相关内容

  • 没有找到相关文章

最新更新