Почему я могу получить доступ к собственному объекту браузера WebSocket в узле / шутке? - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть код браузера, который использует нативную реализацию WebSocket aka
var socket = new WebSocket('ws://localhost:8080')

Хотя этот код отлично работает в моем браузере, я ожидаю, что он будет с треском проваливаться при запуске кода с помощью jest.

Но, что удивительно, у меня нет ошибки, и, похоже, она работает отлично. Я также удивлен отсутствием лучшего вывода в консоли, я не могу осмотреть этот объект, чтобы увидеть, к чему у меня есть доступ.

test('should fail because I cannot see any WebSocket API in node.js doc', async () => {
    await new Promise( resolve => {
      const socket = new WebSocket('ws://localhost:8080')

      socket.onopen = function( event ){
        console.log( event )
        console.log( socket )
        console.log( socket.onopen )

        resolve()
      }
    })
})

Создает следующий вывод:

console.log tests/socket/socket.test.js:5
  Event { isTrusted: [Getter] }
console.log tests/socket/socket.test.js:6
  WebSocket {}
console.log tests/socket/socket.test.js:7
  [Function]

Почему это работает в шутку? Почему мне не нужно использовать такую ​​библиотеку, как ws или socket.io, когда я тестирую код браузера в jest?
Это из-за шутки?

1 Ответ

0 голосов
/ 15 сентября 2018

Jest по умолчанию запускает ваш тест в JSDOM , который реализует WebSocket.Смотри https://jestjs.io/docs/en/configuration#testenvironment-string

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...