2016-04-14 12 views
0

Ich habe versucht, eine Web-Socket-Verbindung zu testen. Es gibt ein paar gute Tutorials gibt, die es beschreiben, die mir von Dummy-Code dieser Art führte nur zu sehen, wenn ich Daten testen können über WebSockets gesendet werden:Mocha-Web-Socket-Test für https-Server

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(); 
     }); 

    }); 
}); 

Ich habe den Server wie so eingerichtet, in dem die Optionen bestimmen den Schlüssel und cert

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); 
    }) 
}) 

das Problem ist zu lesen, dass die client.on (‚connect‘) nie aufgerufen wird, ich das durch nichts Ausdrucken an die Konsole sehen. Alles was passiert, ist ein Timeout-Fehler: "Timeout von 2000ms überschritten. Stellen Sie sicher, dass der done() Callback in diesem Test aufgerufen wird." Ich habe das getan() und es macht keinen Unterschied. Ich denke, das Problem ist, dass die Tutorials, die ich habe, einen http-Server verwenden, während ich einen https-Server verwende, und ich denke, dass dies zusätzliche Methoden erfordern, um eine Verbindung herzustellen, aber ich bin ziemlich neu für Mocha, also nicht weiß, was sie sein können. Jede Hilfe wäre willkommen

Antwort

0

Verwenden Sie selbstsignierte Zertifikate? Wenn ja, Ihr Code wie folgt ausgeführt werden:

env DEBUG=* mocha test/example.js 

gibt den folgenden Fehler:

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"}}} 

Notiere die UNABLE_TO_VERIFY_LEAF_SIGNATURE

So fügen Sie die Zertifizierungsstelle an die Client-Optionen, zum Beispiel

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

fix

data.data.should.equal(10); 

und Ihr Test bestanden:

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


    1 passing (75ms) 
0

Wenn Sie in Mokka Testfall getan passieren, durch Timeout-Zeit Standard ist 2000 ms (2 Sekunden). Es benötigt mehr Zeit, um sich mit Ihrer Web-Socket-Verbindung zu verbinden.

Die gegebenen Fehler Timeout-Fehler: „Timeout von 2000 ms überschritten Sicherstellen, dass die durchgeführt() Rückruf in diesem Test aufgerufen wird

Problem sollte durch den folgenden Code festgelegt werden:..

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) weist den Mocha an, 60 Sekunden zu warten, um den Testfall zu beenden

Verwandte Themen