Probar código asíncrono con Jest o Nock siempre devuelve un error de red.
Esto es informado por otros:
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
De hecho, utilicé la primera solución sugerida en ese StackOverflow: "Solución para cambiar el adaptador axios a http". Eso realmente funciona.
Sin forzar el adaptador http, ejecutar "npm test" con Jest hace que la prueba nunca se complete y se quede bloqueada para siempre.
No estoy seguro de que este sea un problema de Axios en lugar de Jest o Nock y este no es el punto.
Lo que es extraño es el seguimiento de pila a continuación: me parece que está ejecutando la implementación xhr. ¿No es esto extraño en el entorno de los nodos?
¿Existe una forma más sencilla de forzar el uso del adaptador http que la recomendada en StackOverflow?
en createError (node_modules / axios / lib / core / createError.js: 16:15) en XMLHttpRequest.handleError [como un error] (node_modules / axios / lib / adapters / xhr.js: 87: 14) en XMLHttpRequest.callback. (función anónima) (node_modules / jsdom / lib / jsdom / living / events / EventTarget-impl.js: 289: 32) en invokeEventListeners (node_modules / jsdom / lib / jsdom / living / events / EventTarget-impl.js: 219: 27) en invokeInlineListeners (node_modules / jsdom / lib / jsdom / living / events / EventTarget-impl.js: 166: 7) en EventTargetImpl._dispatch (node_modules / jsdom / lib / jsdom / living / events / EventTarget-impl.js: 122: 7) en EventTargetImpl.dispatchEvent (node_modules / jsdom / lib / jsdom / living / events / EventTarget-impl.js: 87: 17) en XMLHttpRequest.dispatchEvent (node_modules / jsdom / lib / jsdom / living / generate / EventTarget.js: 61: 35) en dispatchError (node_modules / jsdom / lib / jsdom / living / xmlhttprequest.js: 994: 9) en validCORSHeaders (node_modules / jsdom / lib / jsdom / living / xmlhttprequest.js: 1009: 7) en ReceiveResponse (node_modules / jsdom / lib / jsdom / living / xmlhttprequest.js: 871: 12) en EventEmitter.client.on.res (node_modules / jsdom / lib / jsdom / living / xmlhttprequest.js: 691: 38) en emitOne (events.js: 96: 13) en EventEmitter.emit (events.js: 191: 7) en Request.realClient.on.res (node_modules / jsdom / lib / jsdom / living / xhr-utils.js: 281: 49) en emitOne (events.js: 96: 13) en Request.emit (events.js: 191: 7) en Request.onRequestResponse (node_modules / request / request.js: 1074: 10) en emitOne (events.js: 101: 20) en ClientRequest.emit (events.js: 191: 7) en HTTPParser.parserOnIncomingClient (_http_client.js: 522: 21) en HTTPParser.parserOnHeadersComplete (_http_common.js: 99: 23) en Socket.socketOnData (_http_client.js: 411: 20) en emitOne (events.js: 96: 13) en Socket.emit (events.js: 191: 7) en readableAddChunk (_stream_readable.js: 178: 18) en Socket.Readable.push (_stream_readable.js: 136: 10) en TCP.onread (net.js: 561: 20)
Si echas un vistazo a tu seguimiento de pila, notarás que hay rastros de jsdom. Eso significa que está utilizando un entorno jsdom / browser en lugar de node. Es solo un problema de configuración de broma.
Cambié el script de prueba en package.json a "test": "react-scripts test --env = node" pero todavía no me funciona. ¿Hay otro lugar donde esto deba cambiarse? (Mi proyecto usó create-react-app)
jest --env=node
me funciona.
Comentario más útil
Si echas un vistazo a tu seguimiento de pila, notarás que hay rastros de jsdom. Eso significa que está utilizando un entorno jsdom / browser en lugar de node. Es solo un problema de configuración de broma.