2017-03-17 9 views
3

私はWebSocketを使用するライブラリをテストしようとしています。私は下のコードを使用してwebsocketを模擬しようとしています。ライブラリROSControllerは、ウェブソケットを使用していますが、私は冗談でWebSocket is not defined.JestでWebSocketをMocking

import { ROSController } from '../ROSController.jsx'; 
var socketMock; 
var windowMock; 
var address = 'ws://test.address'; 

beforeAll(function() { 
    var WebSocket = jasmine.createSpy(); 
    WebSocket.and.callFake(function (url) { 
     socketMock = { 
     url: url, 
     readyState: WebSocket.CONNECTING, 
     send: jasmine.createSpy(), 
     close: jasmine.createSpy().and.callFake(function() { 
      socketMock.readyState = WebSocket.CLOSING; 
     }), 

     // methods to mock the internal behaviour of the real WebSocket 
     _open: function() { 
      socketMock.readyState = WebSocket.OPEN; 
      socketMock.onopen && socketMock.onopen(); 
     }, 
     _message: function (msg) { 
      socketMock.onmessage && socketMock.onmessage({data: msg}); 
     }, 
     _error: function() { 
      socketMock.readyState = WebSocket.CLOSED; 
      socketMock.onerror && socketMock.onerror(); 
     }, 
     _close: function() { 
      socketMock.readyState = WebSocket.CLOSED; 
      socketMock.onclose && socketMock.onclose(); 
     } 
     }; 
     return socketMock; 
    }); 
    WebSocket.CONNECTING = 0; 
    WebSocket.OPEN = 1; 
    WebSocket.CLOSING = 2; 
    WebSocket.CLOSED = 3; 
    windowMock = { 
     WebSocket: WebSocket 
    }; 

    return WebSocket; 
}); 

test('the subscription JSON produced is correct',() => { 
    console.log(WebSocket); //<----- It fails here 
    JSON.parse((new ROSController('')).callService('/test','', function(){})); 

}); 
+0

「ジャスミン」はどこに宣言されていますか? – jered

+0

私のpackage.jsonで?私はちょうどプロジェクトのルートでJestを実行します。これはscripts/__ tests__フォルダーにあります。 Jestは正常に動作しているようだが、私はWebSocket変数 – cjds

答えて

3

を得続ける、あなたがglobal名前空間にwindow別名グローバルスコープで利用可能であるべきものを、追加する必要があります。

global.WebSocket= WebSocket 
+0

を受け取ることができない。これは私にとってはうまくいかない。私はテストセットアップとユニットテストの両方でWebSocketをグローバルスコープに追加しました。どちらの場合でも、私は 'ReferenceError:WebSocket is not defined'を取得します。 –

3
nodejsため、それを利用できるようにする

使用mock-socketパッケージ、その後global

import { WebSocket } from 'mock-socket'; 

global.WebSocket = WebSocket;