[英]Mocking WebSocket in Jest
我正在嘗試測試使用 WebSockets 的庫。 我正在嘗試使用下面的代碼模擬 websocket。 庫ROSController
使用 web sockets,但我一直收到WebSocket is not defined.
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(){}));
});
使用mock-socket
包然后使用global
來使其可用於nodejs:
import { WebSocket } from 'mock-socket';
global.WebSocket = WebSocket;
在jest中,您需要將全局范圍aka window
中應該可用的內容添加到global
命名空間:
global.WebSocket= WebSocket
我創建了一個文件__mocks__/ws.js
:
const {WebSocket} = require("mock-socket");
module.exports = WebSocket
請參閱jest-websocket-mock 的說明:
//模擬/ws.js
從“模擬套接字”導出 { WebSocket 作為默認值};
和手動模擬文檔:
模擬應該放在
__mocks__
目錄中......並且會自動模擬。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.