2016-04-14 5 views
0

ウェブソケット接続をテストしようとしています。そこで私は、WebSocketを介して送信されるデータをテストすることができるかどうかだけ確認するためにダミーのコードのこの種に私を導いていることを説明するが、いくつかの良いチュートリアルアウト:httpsサーバ用のMochaウェブソケットテスト

私はそうのようにサーバーを設定している
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(); 
     }); 

    }); 
}); 

、 OPTIONSは

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サーバーを使用しているのに対し、HTTPサーバーを使用しているのですが、接続するには追加メソッドが必要になるかもしれないと思いますが、私はモカの新機能です彼らが何であるか知っている。 助けていただければ幸いです

答えて

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秒)です。 Webソケット接続に接続するには、より多くの時間が必要です。

所与エラータイムアウトエラー:

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

    }); 
}); 
:「2000ミリ秒のタイムアウト時間を超えて行わ()コールバックは、この試験で呼び出されていることを確認

問題は、以下のコードで固定されなければなりません

this.timeout(60000)は、テストケースを完了するために60秒間待機するようにmochaに指示します。

関連する問題