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アダプターを強制せずに、Jestで「npmtest」を実行すると、テストが完了せず、永久にスタックしたままになります。
これがJestやNockではなくAxiosの問題であるかどうかはわかりませんが、これは重要ではありません。
奇妙なのは、以下のスタックトレースです。xhr実装を実行しているように見えます。 これはノード環境では奇妙ではありませんか?
StackOverflowでアドバイスされている方法よりも、httpアダプターを強制的に使用する簡単な方法はありますか?
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) EmmitOneで(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) EmmitOneで(events.js:96:13) Request.emitで(events.js:191:7) Request.onRequestResponseで(node_modules / request / request.js:1074:10) EmmitOneで(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)で EmmitOneで(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環境を使用していることを意味します。 これは単なる冗談の設定の問題です。
package.jsonのテストスクリプトを "test": "react-scripts test --env = node"に変更しましたが、それでも機能しません。 これを変更する必要がある別の場所はありますか? (私のプロジェクトはcreate-react-appを使用しました)
jest --env=node
は私のために働きます。
最も参考になるコメント
スタックトレースを見ると、jsdomのトレースがあることに気付くでしょう。 これは、ノードではなくjsdom / browser環境を使用していることを意味します。 これは単なる冗談の設定の問題です。