2016-04-14 157 views
0

我一直在试图测试一个web套接字连接。有几个很好的教程在那里,形容它害得我这种伪代码只是为了看看我是否可以测试数据上的WebSockets发送:https服务器的摩卡网络套接字测试

var socketURL= 'https://localhost:9002'; 
var io = require('socket.io-client'); 
options={ 
transports: ['websocket'], 
'force new connection': true 
}; 
describe("Connection test", function(){ 
it('to check if data is received',function(done){ 
    var client = io.connect(socketURL,options); 

    client.on('connect',function(){ 
     console.log("in connect"); 
     client.emit('data',{data:10}); 

     client.on('result',function(data){ 
      console.log(data); 
      data.should.equal(10); 
      done(); 
     }); 

    }); 
}); 

我已经设置了服务器像这样,在该选项决定密钥和证书阅读

var app = express(); 
var httpsServer = https.createServer(OPTIONS, app); 

httpsServer.listen(9002); 
var io = require('socket.io').listen(httpsServer); 
io.on('connection', function(socket){ 
    socket.on('data', function(data){ 
     socket.emit('result',data); 
    }) 
}) 

的问题是client.on(“连接”)不会被调用,我总不能打印到控制台看到这一点。发生的所有情况都是超时错误:“超过2000ms的超时,确保在此测试中调用done()回调函数。” 我已经移动了done(),它不会产生差异。我认为问题在于我遵循的教程使用http服务器,而我使用的是https服务器,我认为这可能需要添加方法来连接,但我对摩卡很陌生,所以我不会知道他们可能是什么。 任何帮助,将不胜感激

回答

0

您使用自签名证书?如果是这样,运行代码是这样的:

env DEBUG=* mocha test/example.js 

提供了以下错误:

Mon, 04 Jul 2016 11:22:20 GMT engine.io-client:socket socket error {"type":"TransportError","description":{"code":"UNABLE_TO_VERIFY_LEAF_SIGNATURE","type":"error","target":{"domain":null,"_events":{},"_eventsCount":4,"_socket":null,"_ultron":null,"_closeReceived":false,"bytesReceived":0,"readyState":0,"supports":{"binary":true},"extensions":{},"_isServer":false,"url":"wss://localhost:9002/socket.io/?EIO=3&transport=websocket","protocolVersion":13,"binaryType":"buffer"}}} 

注意UNABLE_TO_VERIFY_LEAF_SIGNATURE

所以,证书颁发机构添加到客户端的选项,例如

options={ 
ca: fs.readFileSync(path.join(__dirname, '..', 'certs', 'client', 'my-root-ca.crt.pem')), 
transports: ['websocket'], 
'force new connection': true 
}; 

修复

data.data.should.equal(10); 

和您的测试通过了:

Connection test 
in connect 
{ data: 10 } 
    √ to check if data is received (68ms) 


    1 passing (75ms) 
0

如果您通过在摩卡测试用例完成后,默认的超时时间为2000毫秒(2秒)。它需要更多时间来连接到您的网络套接字连接。

给定的错误超时错误:“2000毫秒的超时超标确保完成()回调被称为本次测试

问题应该是固定用下面的代码:。

it('to check if data is received',function(done){ 

    this.timeout(60000); // 60 seconds 
    var client = io.connect(socketURL,options); 

    client.on('connect',function(){ 
     console.log("in connect"); 
     client.emit('data',{data:10}); 

     client.on('result',function(data){ 
      console.log(data); 
      data.should.equal(10); 
      done(); 
     }); 

    }); 
}); 

this.timeout(60000)告诉摩卡等待60秒完成测试用例。

相关问题