При тестировании асинхронного кода с помощью Jest или Nock всегда возвращается сетевая ошибка.
Об этом сообщают другие:
https://www.bountysource.com/issues/38003315-network-error-when-using-nock-with-axios
https://stackoverflow.com/questions/42677387/jest-returns-network-error-when-doing-an-authenticated-request-with-axios
На самом деле я использовал первое решение, предложенное для этого StackOverflow: «Решение изменить адаптер axios на http». Это действительно работает.
Без принудительного использования http-адаптера запуск «npm test» с Jest приведет к тому, что тест никогда не завершится и застрянет навсегда.
Я не уверен, что это проблема Axios, а не Jest или Nock, и дело не в этом.
Что странно, так это трассировка стека ниже: мне кажется, что выполняется реализация xhr. Разве это не странно в среде узлов?
Есть ли более простой способ принудительно использовать адаптер http, чем тот, который рекомендован в StackOverflow?
в createError (node_modules / axios / lib / core / createError.js: 16:15) в XMLHttpRequest.handleError [как onerror] (node_modules / axios / lib / adapters / xhr.js: 87: 14) в XMLHttpRequest.callback. (анонимная функция) (node_modules / jsdom / lib / jsdom / living / events / EventTarget-impl.js: 289: 32) в invokeEventListeners (node_modules / jsdom / lib / jsdom / living / events / EventTarget-impl.js: 219: 27) в invokeInlineListeners (node_modules / jsdom / lib / jsdom / living / events / EventTarget-impl.js: 166: 7) в EventTargetImpl._dispatch (node_modules / jsdom / lib / jsdom / living / events / EventTarget-impl.js: 122: 7) в EventTargetImpl.dispatchEvent (node_modules / jsdom / lib / jsdom / living / events / EventTarget-impl.js: 87: 17) в XMLHttpRequest.dispatchEvent (node_modules / jsdom / lib / jsdom / living / generated / EventTarget.js: 61: 35) при dispatchError (node_modules / jsdom / lib / jsdom / living / xmlhttprequest.js: 994: 9) в validCORSHeaders (node_modules / jsdom / lib / jsdom / living / xmlhttprequest.js: 1009: 7) в receiveResponse (node_modules / jsdom / lib / jsdom / living / xmlhttprequest.js: 871: 12) в EventEmitter.client.on.res (node_modules / jsdom / lib / jsdom / living / xmlhttprequest.js: 691: 38) в emitOne (events.js: 96: 13) в EventEmitter.emit (events.js: 191: 7) в Request.realClient.on.res (node_modules / jsdom / lib / jsdom / living / xhr-utils.js: 281: 49) в emitOne (events.js: 96: 13) в Request.emit (events.js: 191: 7) в Request.onRequestResponse (node_modules / request / request.js: 1074: 10) на emitOne (events.js: 101: 20) в ClientRequest.emit (events.js: 191: 7) в HTTPParser.parserOnIncomingClient (_http_client.js: 522: 21) в HTTPParser.parserOnHeadersComplete (_http_common.js: 99: 23) в Socket.socketOnData (_http_client.js: 411: 20) в emitOne (events.js: 96: 13) в Socket.emit (events.js: 191: 7) в readableAddChunk (_stream_readable.js: 178: 18) в Socket.Readable.push (_stream_readable.js: 136: 10) в TCP.onread (net.js: 561: 20)
Если вы посмотрите на трассировку стека, вы заметите следы jsdom. Это означает, что вы используете среду jsdom / browser, а не node. Это просто проблема с конфигурацией шутки.
Я изменил тестовый сценарий в package.json на "test": "response-scripts test --env = node", но он все еще не работает для меня. Есть ли другое место, где это нужно изменить? (В моем проекте использовалось приложение create-response-app)
jest --env=node
у меня работает.
Самый полезный комментарий
Если вы посмотрите на трассировку стека, вы заметите следы jsdom. Это означает, что вы используете среду jsdom / browser, а не node. Это просто проблема с конфигурацией шутки.