Axios: Jest ๋ฐ Nock์€ Axios๋กœ ์š”์ฒญํ•  ๋•Œ ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2017๋…„ 06์›” 05์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: axios/axios

์š”์•ฝ

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์™€ ํ•จ๊ป˜ "npm test"๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ํ…Œ์ŠคํŠธ๊ฐ€ ์™„๋ฃŒ๋˜์ง€ ์•Š๊ณ  ์˜์›ํžˆ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด 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)
 at 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)
 ์œ ํšจํ•œCORSHeaders(node_modules/jsdom/lib/jsdom/living/xmlhttprequest.js:1009:7)
 ์ˆ˜์‹  ์‘๋‹ต(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)

๋ฌธ๋งฅ

  • ์•ก์‹œ์˜ค์Šค ๋ฒ„์ „:
  • ํ™˜๊ฒฝ: ๋…ธ๋“œ v7.10, Ubuntu 17.04 Linux 4.10

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์Šคํƒ ์ถ”์ ์„ ์‚ดํŽด๋ณด๋ฉด jsdom์˜ ํ”์ ์ด ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋…ธ๋“œ๊ฐ€ ์•„๋‹Œ jsdom/๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ๋†๋‹ด ๊ตฌ์„ฑ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

์Šคํƒ ์ถ”์ ์„ ์‚ดํŽด๋ณด๋ฉด jsdom์˜ ํ”์ ์ด ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋…ธ๋“œ๊ฐ€ ์•„๋‹Œ jsdom/๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ๋†๋‹ด ๊ตฌ์„ฑ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

package.json์˜ ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ "test": "react-scripts test --env=node"๋กœ ๋ณ€๊ฒฝํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š” ๋‹ค๋ฅธ ๊ณณ์ด ์žˆ์Šต๋‹ˆ๊นŒ? (๋‚ด ํ”„๋กœ์ ํŠธ๋Š” create-react-app์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค)

jest --env=node ๋Š” ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰