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)
์คํ ์ถ์ ์ ์ดํด๋ณด๋ฉด jsdom์ ํ์ ์ด ์์์ ์ ์ ์์ต๋๋ค. ์ฆ, ๋ ธ๋๊ฐ ์๋ jsdom/๋ธ๋ผ์ฐ์ ํ๊ฒฝ์ ์ฌ์ฉํ๊ณ ์๋ค๋ ์๋ฏธ์ ๋๋ค. ๊ทธ๋ฅ ๋๋ด ๊ตฌ์ฑ ๋ฌธ์ ์ ๋๋ค.
package.json์ ํ ์คํธ ์คํฌ๋ฆฝํธ๋ฅผ "test": "react-scripts test --env=node"๋ก ๋ณ๊ฒฝํ์ง๋ง ์ฌ์ ํ ์๋ํ์ง ์์ต๋๋ค. ์ด๊ฒ์ ๋ฐ๊ฟ์ผ ํ๋ ๋ค๋ฅธ ๊ณณ์ด ์์ต๋๊น? (๋ด ํ๋ก์ ํธ๋ create-react-app์ ์ฌ์ฉํ์ต๋๋ค)
jest --env=node
๋ ์ ์๊ฒ ํจ๊ณผ์ ์
๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์คํ ์ถ์ ์ ์ดํด๋ณด๋ฉด jsdom์ ํ์ ์ด ์์์ ์ ์ ์์ต๋๋ค. ์ฆ, ๋ ธ๋๊ฐ ์๋ jsdom/๋ธ๋ผ์ฐ์ ํ๊ฒฝ์ ์ฌ์ฉํ๊ณ ์๋ค๋ ์๋ฏธ์ ๋๋ค. ๊ทธ๋ฅ ๋๋ด ๊ตฌ์ฑ ๋ฌธ์ ์ ๋๋ค.