Testar o código assíncrono com Jest ou Nock sempre retorna erro de rede.
Isso é relatado por outros:
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
Na verdade, usei a primeira solução sugerida nesse StackOverflow: "Solução mudar adaptador de axios para http". Isso realmente funciona.
Sem forçar o adaptador http, executar "npm test" com Jest faz com que o teste nunca seja concluído e fique travado para sempre.
Não tenho certeza se isso é um problema do Axios, em vez de Jest ou Nock, e esse não é o ponto.
O que é estranho é o stacktrace abaixo: parece-me que está executando a implementação xhr. Isso não é estranho no ambiente do nó?
Existe uma maneira mais simples de forçar o uso do adaptador http do que a recomendada em StackOverflow?
em createError (node_modules / axios / lib / core / createError.js: 16: 15) em XMLHttpRequest.handleError [as onerror] (node_modules / axios / lib / adapters / xhr.js: 87: 14) em XMLHttpRequest.callback. (função anônima) (node_modules / jsdom / lib / jsdom / living / events / EventTarget-impl.js: 289: 32) em invokeEventListeners (node_modules / jsdom / lib / jsdom / living / events / EventTarget-impl.js: 219: 27) em invokeInlineListeners (node_modules / jsdom / lib / jsdom / living / events / EventTarget-impl.js: 166: 7) em EventTargetImpl._dispatch (node_modules / jsdom / lib / jsdom / living / events / EventTarget-impl.js: 122: 7) em EventTargetImpl.dispatchEvent (node_modules / jsdom / lib / jsdom / living / events / EventTarget-impl.js: 87: 17) em XMLHttpRequest.dispatchEvent (node_modules / jsdom / lib / jsdom / living / generated / EventTarget.js: 61: 35) em dispatchError (node_modules / jsdom / lib / jsdom / living / xmlhttprequest.js: 994: 9) em validCORSHeaders (node_modules / jsdom / lib / jsdom / living / xmlhttprequest.js: 1009: 7) em receiveResponse (node_modules / jsdom / lib / jsdom / living / xmlhttprequest.js: 871: 12) em EventEmitter.client.on.res (node_modules / jsdom / lib / jsdom / living / xmlhttprequest.js: 691: 38) em emitOne (events.js: 96: 13) em EventEmitter.emit (events.js: 191: 7) em Request.realClient.on.res (node_modules / jsdom / lib / jsdom / living / xhr-utils.js: 281: 49) em emitOne (events.js: 96: 13) em Request.emit (events.js: 191: 7) em Request.onRequestResponse (node_modules / request / request.js: 1074: 10) em emitOne (events.js: 101: 20) em ClientRequest.emit (events.js: 191: 7) em HTTPParser.parserOnIncomingClient (_http_client.js: 522: 21) em HTTPParser.parserOnHeadersComplete (_http_common.js: 99: 23) em Socket.socketOnData (_http_client.js: 411: 20) em emitOne (events.js: 96: 13) em Socket.emit (events.js: 191: 7) em readableAddChunk (_stream_readable.js: 178: 18) em Socket.Readable.push (_stream_readable.js: 136: 10) em TCP.onread (net.js: 561: 20)
Se você der uma olhada no rastreamento de pilha, notará que há vestígios de jsdom. Isso significa que você está usando um ambiente jsdom / navegador em vez de um nó. É apenas um problema de configuração de brincadeira.
Mudei o script de teste em package.json para "test": "react-scripts test --env = node", mas ainda não está funcionando para mim. Existe outro lugar onde isso precisa ser mudado? (Meu projeto usou create-react-app)
jest --env=node
funciona para mim.
Comentários muito úteis
Se você der uma olhada no rastreamento de pilha, notará que há vestígios de jsdom. Isso significa que você está usando um ambiente jsdom / navegador em vez de um nó. É apenas um problema de configuração de brincadeira.