Tester le code async avec Jest ou Nock renvoie toujours une erreur de réseau.
Ceci est rapporté par d'autres:
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
J'ai en fait utilisé la première solution suggérée sur ce StackOverflow: "Solution change axios adapter to http". Cela fonctionne réellement.
Sans forcer l'adaptateur http, l'exécution de "npm test" avec Jest fait en sorte que le test ne se termine jamais et reste bloqué pour toujours.
Je ne suis pas sûr que ce soit un problème Axios plutôt que Jest ou Nock et ce n'est pas le sujet.
Ce qui est étrange, c'est le stacktrace ci-dessous : il me semble qu'il exécute l'implémentation xhr. N'est-ce pas étrange dans l'environnement de nœud ?
Existe-t-il un moyen plus simple de forcer l'utilisation de l'adaptateur http que celui conseillé sur StackOverflow ?
à createError (node_modules/axios/lib/core/createError.js:16:15) à XMLHttpRequest.handleError [as onerror] (node_modules/axios/lib/adapters/xhr.js:87:14) à XMLHttpRequest.callback.(fonction anonyme) (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) à émetOne (events.js:101:20) à ClientRequest.emit (events.js:191:7) sur 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)
Si vous jetez un œil à votre trace de pile, vous remarquerez qu'il y a des traces de jsdom. Cela signifie que vous utilisez un environnement jsdom/browser plutôt que node. C'est juste un problème de configuration de plaisanterie.
J'ai changé le script de test dans package.json en "test": "react-scripts test --env=node" mais cela ne fonctionne toujours pas pour moi. Y a-t-il un autre endroit où cela doit être changé? (Mon projet a utilisé create-react-app)
jest --env=node
fonctionne pour moi.
Commentaire le plus utile
Si vous jetez un œil à votre trace de pile, vous remarquerez qu'il y a des traces de jsdom. Cela signifie que vous utilisez un environnement jsdom/browser plutôt que node. C'est juste un problème de configuration de plaisanterie.