Jest: [์งˆ๋ฌธ] Jest๊ฐ€ ๋ฐฑ์—”๋“œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์— ์ ํ•ฉํ•ฉ๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2016๋…„ 08์›” 04์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: facebook/jest

๋‚˜๋Š” ์ง€๊ธˆ๊นŒ์ง€ React ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” Jest๋ฅผ ์‚ฌ๋ž‘ํ•ด ์™”์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋…ธ๋“œ ๋ฐฑ์—”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด Mocha/Jasmine์„ ์‚ฌ์šฉ/์‚ฌ์šฉํ•ด ์™”์œผ๋ฉฐ, ๋ฌธ์„œ(React)์—์„œ Jest๋ฅผ ๋ฐฑ์—”๋“œ ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ฌป๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. , React-Native, Async, Webpack, ์ฆ‰ Node )

๋ฐฉ๊ธˆ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ๋Š”๋ฐ ๋ถˆํ–‰ํžˆ๋„ ์ฆ‰๊ฐ์ ์ธ ์žฅ์• ๋ฌผ์— ๋ถ€๋”ช์ณค์Šต๋‹ˆ๋‹ค. brcypt ๋Š” [SECURITY] node-uuid: crypto not usable, falling back to insecure Math.random() ๊ฒฝ๊ณ ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ณ  ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜( TypeError: Path must be a string. Received undefined )๋กœ ์ธํ•ด ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ ๋ฐฑ์—”๋“œ ํ…Œ์ŠคํŠธ์— Jest๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ํ”„๋กœ์ ํŠธ ๋ฒ”์œ„์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ๋ฉฐ Jasmine๊ณผ ๊ฐ™์€ ๊ฒƒ์ด ๋” ์ ํ•ฉํ•ฉ๋‹ˆ๊นŒ?

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

์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ฐฑ์—”๋“œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๊นŒ? Jest ์ž์ฒด๋Š” ํ…Œ์ŠคํŠธ์— Jest๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํ…Œ์ŠคํŠธ์— Jest๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” npm install ๋ฐ npm test ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ €์žฅ์†Œ๋ฅผ github์— ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚ด๊ฐ€ ์ถ”์ฒœํ•˜๋Š” ๋‘ ๊ฐ€์ง€: "automock": false ๋ฐ "testEnvironment": "node" ์„ค์ •์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ๊ฐ€ ์ด์— ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ ๋ณ„๋„์˜ Jest ๊ตฌ์„ฑ์„ ๋งŒ๋“ค๊ณ  --config=pathToConfig.json jest๋ฅผ ์‹คํ–‰ํ•˜๊ณ  modulePathIgnorePatterns ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋ŸฐํŠธ์—”๋“œ ํ…Œ์ŠคํŠธ๋ฅผ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ฐฑ์—”๋“œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๊นŒ? Jest ์ž์ฒด๋Š” ํ…Œ์ŠคํŠธ์— Jest๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํ…Œ์ŠคํŠธ์— Jest๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” npm install ๋ฐ npm test ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ €์žฅ์†Œ๋ฅผ github์— ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚ด๊ฐ€ ์ถ”์ฒœํ•˜๋Š” ๋‘ ๊ฐ€์ง€: "automock": false ๋ฐ "testEnvironment": "node" ์„ค์ •์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ๊ฐ€ ์ด์— ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ ๋ณ„๋„์˜ Jest ๊ตฌ์„ฑ์„ ๋งŒ๋“ค๊ณ  --config=pathToConfig.json jest๋ฅผ ์‹คํ–‰ํ•˜๊ณ  modulePathIgnorePatterns ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋ŸฐํŠธ์—”๋“œ ํ…Œ์ŠคํŠธ๋ฅผ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋น ๋ฅธ ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @cpojer!

Jest๋ฅผ Node์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์†Œ์‹์„ ๋“ค์œผ๋‹ˆ ๊ธฐ์ฉ๋‹ˆ๋‹ค! ๋ณธ์งˆ์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ณ  API๊ฐ€ ์ž‘๋™ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ ‡๊ฒŒ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ Node ๋ฐฑ์—”๋“œ ๋ฐ ๋Œ€๋ถ€๋ถ„ react(๋˜๋Š” ๋‚ด Google-Fu ๊ทธ๋ƒฅ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค).

๋‚˜๋Š” ์ด๋ฏธ ๋‚ด node_modules ์กฐ๋กฑํ•˜๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์‹ค์ด ์•„๋‹ˆ์—ˆ์ง€๋งŒ testEnvironment: node ์ด ํŠธ๋ฆญ์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค!

๊ฑด๋ฐฐ!

์˜ˆ, ๊ธฐ๋ณธ ํ™˜๊ฒฝ( jsdom )์ด ํ•ญ์ƒ ๋…ธ๋“œ ํ…Œ์ŠคํŠธ์— ์ ํ•ฉํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ์ด์ ์€ jsdom์ด ๋‹ค์†Œ ๋Š๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋…ธ๋“œ ํ™˜๊ฒฝ์ด 500ms ๋” ๋น ๋ฅด๊ฒŒ(ํšจ๊ณผ์ ์œผ๋กœ ์ฆ‰์‹œ) ๋กœ๋“œ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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