2016-04-14 80 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秒完成測試用例。

相關問題