Макетируйте и тестируйте websocket, используя модуль ws с Jest - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть модуль, который подключается к API веб-сокета в качестве клиента. Это выглядит следующим образом:

. / Src / utils / connect-realtime-api. js

const WebSocket = require('ws')
const setup = require('./helpers/setup')

connectRealtimeAPI = () => {
    const ws = new WebSocket('wss //echo.websocket.org')

    ws.onopen = () => {
        ws.send(JSON.stringify({ "type": "reg", "channel": "stats1" }))
        ws.send(JSON.stringify({ "type": "reg", "channel": "stats2" }))
        console.log('[WebSocket] Connection opened.')
    }

    ws.onerror = (event) => {
        console.error('[WebSocket] An error occurred.')
        console.error(`Code: ${event.code}`)
        console.error(`Reason: ${event.reason}`)
    }

    ws.onclose = (event) => {
        console.error('[Websocket] Connection closed.')
        console.error(`Code: ${event.code}`)
        console.error(`Reason: ${event.reason}`)
        console.log('Retrying connection in 10 seconds...')
        setTimeout(() => connectRealtimeAPI(), 10000)
    }

    setup(ws)
}

module.exports = connectRealtimeAPI

setup функция принимает ws в качестве параметра, а затем выполняет некоторые действия на основе полученных сообщений.

. / src / utils / helpers / setup. js

const setup = (ws) => {
  ws.onmessage = (event) => {
      data = JSON.parse(event.data)

      // Perform actions based on order in which messages are received.
  }
}

module.exports = setup

Я хочу проверить connect-realtime-api.js, а также setup.js, используя Jest.

Для этого мне нужно смоделировать библиотеку ws с помощью Jest, поместив ws.js в каталог __mocks__ и найти способ отправки open, error, close а также сообщения через поддельные ws, чтобы вызвать соответствующие console.logs и console.errors и затем проверить их.

Я нашел эту библиотеку, которая может помочь мне достичь этого, но Я не могу понять, как это сделать go. Здесь также есть подсказка реализации, приведенная здесь , но, опять же, я не могу понять, как отправлять события / сообщения после успешной проверки ws.

Нужна помощь в отношении деталей реализации для испытаний.

...