Das Testen von asynchronem Code mit Jest oder Nock gibt immer Netzwerkfehler zurück.
Dies wird von anderen berichtet:
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
Ich habe tatsächlich die erste Lösung verwendet, die auf diesem StackOverflow vorgeschlagen wurde: "Solution change axios adapter to http". Das funktioniert tatsächlich.
Ohne den HTTP-Adapter zu erzwingen, führt das Ausführen von "npm test" mit Jest dazu, dass der Test nie abgeschlossen wird und für immer stecken bleibt.
Ich bin mir nicht sicher, ob dies eher ein Axios-Problem als Jest oder Nock ist, und darum geht es nicht.
Seltsam ist der Stacktrace unten: Mir scheint, dass die xhr-Implementierung ausgeführt wird. Ist das in der Knotenumgebung nicht seltsam?
Gibt es eine einfachere Möglichkeit, die Verwendung des HTTP-Adapters zu erzwingen, als die auf StackOverflow empfohlene?
at createError (node_modules/axios/lib/core/createError.js:16:15) at XMLHttpRequest.handleError [as onerror] (node_modules/axios/lib/adapters/xhr.js:87:14) at XMLHttpRequest.callback.(anonyme Funktion) (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:289:32) at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:219:27) at invokeInlineListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:166:7) at EventTargetImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:122:7) bei EventTargetImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:87:17) at XMLHttpRequest.dispatchEvent (node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:61:35) at dispatchError (node_modules/jsdom/lib/jsdom/living/xmlhttprequest.js:994:9) bei validCORSHeaders (node_modules/jsdom/lib/jsdom/living/xmlhttprequest.js:1009:7) bei receiveResponse (node_modules/jsdom/lib/jsdom/living/xmlhttprequest.js:871:12) at EventEmitter.client.on.res (node_modules/jsdom/lib/jsdom/living/xmlhttprequest.js:691:38) bei emitOne (events.js:96:13) bei EventEmitter.emit (events.js:191:7) unter Request.realClient.on.res (node_modules/jsdom/lib/jsdom/living/xhr-utils.js:281:49) bei emitOne (events.js:96:13) bei Request.emit (events.js:191:7) bei Request.onRequestResponse (node_modules/request/request.js:1074:10) bei emitOne (events.js:101:20) bei ClientRequest.emit (events.js:191:7) bei HTTPParser.parserOnIncomingClient (_http_client.js:522:21) bei HTTPParser.parserOnHeadersComplete (_http_common.js:99:23) bei Socket.socketOnData (_http_client.js:411:20) bei emitOne (events.js:96:13) bei Socket.emit (events.js:191:7) bei readableAddChunk (_stream_readable.js:178:18) bei Socket.Readable.push (_stream_readable.js:136:10) bei TCP.onread (net.js:561:20)
Wenn Sie sich Ihren Stack-Trace ansehen, werden Sie feststellen, dass es Spuren von jsdom gibt. Das bedeutet, dass Sie eine jsdom/Browser-Umgebung anstelle von Node verwenden. Es ist nur ein scherzhaftes Konfigurationsproblem.
Ich habe das Testskript in package.json in "test": "react-scripts test --env=node" geändert, aber es funktioniert immer noch nicht bei mir. Gibt es noch eine andere Stelle, an der das geändert werden muss? (Mein Projekt verwendete Create-React-App)
jest --env=node
funktioniert bei mir.
Hilfreichster Kommentar
Wenn Sie sich Ihren Stack-Trace ansehen, werden Sie feststellen, dass es Spuren von jsdom gibt. Das bedeutet, dass Sie eine jsdom/Browser-Umgebung anstelle von Node verwenden. Es ist nur ein scherzhaftes Konfigurationsproblem.