我正在尝试使用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的期望)。
我认为您需要使用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现在也有可能认为测试已完成。
测试可能仍然会失败,但是应该一致地进行,除非它具有某些不一致的依赖项。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句