<p>mocha 4๋Š” mocha 3๊ณผ ๋‹ฌ๋ฆฌ ์ข…๋ฃŒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.</p>

์— ๋งŒ๋“  2017๋…„ 10์›” 03์ผ  ยท  61์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: mochajs/mocha

์ „์ œ ์กฐ๊ฑด

  • [x] common mistake ๋ผ๋ฒจ๋กœ ๋ฌธ์ œ๋ฅผ ์ƒํ˜ธ ์ฐธ์กฐํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ์ด๋ฏธ ์ œ์ถœ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
  • [x] Mocha์—†์ด ๋™์ผํ•œ ํ™˜๊ฒฝ ๋ฐ / ๋˜๋Š” ํŠธ๋žœ์Šค ํŒŒ์ผ๋Ÿฌ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฐจ์„ธ๋Œ€ ES ๋ฌธ์ œ ๋ฐ ๊ตฌ๋ฌธ ๋ฌธ์ œ๋ฅผ ํ™•์ธํ•˜์—ฌ ํ•ด๋‹น ํ™˜๊ฒฝ์—์„œ ์‹ค์ œ๋กœ ์ง€์›๋˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์ด๋‚˜ ์ฝ”๋“œ์˜ ๋ฒ„๊ทธ๊ฐ€ ์•„๋‹Œ์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. .
  • [x] ํ…Œ์ŠคํŠธ ํ•  ์ฝ”๋“œ๋ฅผ ์‹ค์ œ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ์™ธ๋ถ€์—์„œ ์‹คํ–‰ํ•˜์—ฌ ํ…Œ์ŠคํŠธ ํ•  ์ฝ”๋“œ๋ฅผ '์Šค๋ชจํฌ ํ…Œ์ŠคํŠธ'ํ•˜์—ฌ ํ…Œ์ŠคํŠธ์ค‘์ธ ์ฝ”๋“œ, Mocha ์‚ฌ์šฉ ๋˜๋Š” Mocha ์ž์ฒด์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ๋” ์ž˜ ํŒŒ์•…ํ•ฉ๋‹ˆ๋‹ค.
  • [x] ๋กœ์ปฌ ๋ฐ ๊ธ€๋กœ๋ฒŒ ์„ค์น˜๋œ Mocha ๋ฒ„์ „๊ฐ„์— ๋ถˆ์ผ์น˜๊ฐ€ ์—†๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ํ†ตํ•ด ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    node node_modules/.bin/mocha --version (๋กœ์ปฌ) ๋ฐ mocha --version (๊ธ€๋กœ๋ฒŒ). ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ์„ค์น˜๋œ Mocha๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ธฐ์ˆ 

๋‚˜๋Š” ๋ช‡ ๋…„ ๋™์•ˆ ํŠน์ • ํ…Œ์ŠคํŠธ ์„ธํŠธ๋ฅผ ์‹คํ–‰ํ–ˆ์œผ๋ฉฐ ํ•ญ์ƒ ์ตœ์‹  ๋ชจ์นด๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ์œผ๋ฉฐ ๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
mocha 4๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ‘์ž๊ธฐ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผ๋˜์ง€๋งŒ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ --no-exit๊ฐ€ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€ ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์žฌํ˜„ ๋‹จ๊ณ„

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘ :
๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ๋๋‚˜๋ฉด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ๋ชปํ•˜๊ฒŒํ•˜๋Š” ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋˜๋Š” ์†Œ์ผ“์ด ์žˆ์–ด๋„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ค‘์ง€๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ํ–‰๋™ :
Mocha 4 ํ”„๋กœ์„ธ์Šค๋Š” --no-exit ํ”Œ๋ž˜๊ทธ๋กœ mocha 3์ฒ˜๋Ÿผ ์˜์›ํžˆ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋นˆ๋„๋ฅผ ์žฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
ํ•ญ์ƒ ์šฐ๋ฆฌ์˜ ํ…Œ์ŠคํŠธ์™€ ํ•จ๊ป˜. ๋‚˜๋Š” 700 ๊ฐœ์˜ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ์–ด์„œ ์–ด๋Š ๊ฒƒ์ด ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” ์ง€ ๋˜๋Š” ๊ทธ๊ฒƒ์ด ์šฐ๋ฆฌ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์žˆ๋Š”์ง€๋ฅผ ์ •ํ™•ํžˆ ์ฐพ์•„ ๋‚ด๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๋ฒ„์ „

mocha 4.0.0์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ „์— ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

faq question

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

๋น ๋ฅธ ์ˆ˜์ • ( --exit ์‚ฌ์šฉ)์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ ์™ธ์— ๊ฒฐํ•จ์ด์žˆ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ฐพ๋Š” ํ•ต์‹ฌ ๋ฌธ์ œ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋งก๊ฒผ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ง€๊ธˆ ๋‚˜ ์ž์‹ ์ด ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ์ง€๋งŒ ๋ฉ”์ด์ € ๋ฒ„์ „์„ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•  ๋•Œ ๋งน๋ชฉ์ ์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์ง€ ๋ง๊ณ  ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ๋ฅผ ์ฝ์œผ์‹ญ์‹œ์˜ค.

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

๋‚˜๋Š” ๋˜‘๊ฐ™์€ ๋ฌธ์ œ๋ฅผ๋ณด๊ณ ์žˆ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผ๋˜๋ฉด ๋ชจ์นด๊ฐ€ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ๋‚ด Travis CI๋ณด๊ธฐ :
https://travis-ci.org/mkrufky/node-dvbtee/builds/282593109

๋˜ํ•œ video-dev / hls.js์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผ ํ•œ ํ›„ mocha๊ฐ€ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.
https://travis-ci.org/video-dev/hls.js/builds/282590422

๋ฆด๋ฆฌ์Šค ๋…ธํŠธ๋ฅผ ์ฝ์—ˆ์Šต๋‹ˆ๊นŒ? https://boneskull.com/mocha-v4-nears-release/#mochawontforceexit

๊ฐ์‚ฌ. tok bad mocha ์›น ์‚ฌ์ดํŠธ๊ฐ€์ด ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์— cli args๋Š” ๊ทธ๊ฒƒ์„ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋น ๋ฅธ ์ˆ˜์ • ( --exit ์‚ฌ์šฉ)์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ ์™ธ์— ๊ฒฐํ•จ์ด์žˆ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ฐพ๋Š” ํ•ต์‹ฌ ๋ฌธ์ œ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋งก๊ฒผ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ง€๊ธˆ ๋‚˜ ์ž์‹ ์ด ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ์ง€๋งŒ ๋ฉ”์ด์ € ๋ฒ„์ „์„ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•  ๋•Œ ๋งน๋ชฉ์ ์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์ง€ ๋ง๊ณ  ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ๋ฅผ ์ฝ์œผ์‹ญ์‹œ์˜ค.

๋ฆด๋ฆฌ์Šค ๋…ธํŠธ๋Š” https://github.com/mafintosh/why-is-node-running/issues/7 ๋กœ ์ธํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ  why-is-node-running ์‚ฌ์šฉ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ๋„ ๋งž์•˜์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋ณ€๊ฒฝ ์ด์œ ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์ฃผ ๋ฒ„์ „์„ ๋Š˜๋ ค ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ why-is-node-running ์ด (๊ฐ€) ํฌ๊ธฐ๋˜๊ณ  ์†์ƒ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ์‚ฌ์šฉ์ž ์นœํ™”์  ์ธ ๋ณ€๊ฒฝ์ด ์•„๋‹ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”,

๋จผ์ €,์ด ์‹œ์ ์—์„œ ๋Œ€๋žต์ ์ธ ์—…๊ทธ๋ ˆ์ด๋“œ ๊ฒฝ๋กœ์— ๋Œ€ํ•ด ์‚ฌ๊ณผํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Mocha๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ…Œ์ŠคํŠธ ์‹คํ–‰์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ๋ ค์•ผํ•œ๋‹ค๋Š” ๋ฐ ํ™•์‹คํžˆ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค (๊ทธ๋Ÿฌ๋ฉด ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ณ„์† ์—ด์–ด ๋‘˜ ํ•„์š”๋„ ์—†์Šต๋‹ˆ๋‹ค. ์™„๋ฃŒ ํ›„ ์‹คํŒจ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ด์œ ๊ฐ€๋˜์ง€๋งŒ ์•„์ง ์™„์ „ํžˆ ๋งŒ์กฑ์Šค๋Ÿฌ์šด ๋ฐฉ๋ฒ•์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„์ „ 4๋Š” PhantomJS 1.x์˜ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ (package-lock.json)์˜ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด CI๊ฐ€ ์‹คํŒจํ•จ์œผ๋กœ์จ ์š”์ฒญํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์‹œ๊ฐ„์„ ์–ป์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฏธ๋ฆฌ ์„ค์ •ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค ). why-is-node-running ๋Š” ๋„์›€์ด๋˜๋Š” ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜ ์˜€์ง€๋งŒ ํ†ตํ•ฉ ํ•  ์ˆ˜๋Š” ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค ( --expose-internals ์˜ ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์ถœ๋ ฅ์„ ์–ป์„ ์ˆ˜์žˆ๋Š” ์ข‹์€ ๋ฐฉ๋ฒ• ๋ถ€์กฑ ์‚ฌ์ด). ๋‚œ ๋‹น์‹ ์ด ๋ช‡ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค :

  • --expose-internals ( node --expose-internals node_modules/mocha/bin/_mocha )๋กœ Mocha ์‹คํ–‰
  • (์— ๋‚˜์™€์žˆ๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด, ์ฒซ ๋ฒˆ์งธ ํ…Œ์ŠคํŠธ ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ mocha.opts ) ํฌํ•จ (๋˜๋Š” ์ ์–ด๋„ ์‹œ์ž‘) after(require('why-is-node-running'))

... ์•„๋ฌด๊ฒƒ๋„ ์•„๋‹Œ ๊ฒƒ๋ณด๋‹ค ๋‚ซ์Šต๋‹ˆ๋‹ค (์ด๋ฅผ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค). ๋” ๋‚˜์€ ์˜ต์…˜์„ ์•„๋Š” ์‚ฌ๋žŒ์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค!

๋˜ํ•œ ์‚ฌ์ดํŠธ ๋ฌธ์„œ๊ฐ€ ๋ˆ„๋ฝ๋˜์–ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ ์—…๋ฐ์ดํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. (# 2987์ด ์™„๋ฃŒ๋˜๋ฉด ๋ฒ„์ „ / ๊ฒŒ์‹œ ์Šคํฌ๋ฆฝํŒ…์˜ ์ž๋™ ์ผ๋ถ€๋กœ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค!)

์•ˆ๋…•ํ•˜์„ธ์š”.

borisov<strong i="7">@glossy</strong>:~/test/mocha $ node --version
v6.11.3

borisov<strong i="8">@glossy</strong>:~/test/mocha $ ./node_modules/.bin/mocha --version
4.0.0

borisov<strong i="9">@glossy</strong>:~/test/mocha $ ./node_modules/.bin/mocha --expose-internals test.spec.js 
  error: unknown option `--expose-internals'

ํŽธ์ง‘ํ•˜๋‹ค:

์ด๊ฒƒ์€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค :

node --expose-internals ./node_modules/.bin/mocha test.spec.js

๊ทธ๋ž˜, ๋ฏธ์•ˆ ๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋ช…ํ™•ํ•˜์ง€ ์•Š์•˜๋‹ค - --expose-internals ์‹คํ–‰ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๋…ธ๋“œ ์˜ต์…˜์ž…๋‹ˆ๋‹ค node --expose-internals ./node_modules/mocha/bin/_mocha ๋Œ€์‹  ./node_modules/.bin/mocha . Mocha๊ฐ€ ํŠน์ • ํ”Œ๋ž˜๊ทธ๋ฅผ Node์— ์ „๋‹ฌํ•˜๊ณ  ํ•ด๋‹น ํ”Œ๋ž˜๊ทธ์— --expose-internals ๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—์ด ๋ฌธ์ œ๋„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

mochajs / mochajs.github.io # 81 ๋ฐ # 3045๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฌธ์„œ ๋ฐ Mocha์˜ ๋…ธ๋“œ ํ”Œ๋ž˜๊ทธ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฐ๊ฐ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ ๋ฌธ์„œ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋  ๋•Œ๊นŒ์ง€์ด ๋ฌธ์ œ๋ฅผ ๊ณ„์† ์—ด์–ด ๋‘ก๋‹ˆ๋‹ค.

@ScottFreeCode --expose-internals ์€ ๋…ธ๋“œ <= 6์—์„œ๋งŒ ์ž‘๋™ํ•œ๋‹ค๊ณ  ์–ธ๊ธ‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ์ผ์‹œ์ ์œผ๋กœ ๋…ธ๋“œ 6์œผ๋กœ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œํ•˜์—ฌ ์ทจ์†Œ ํ•˜๊ฑฐ๋‚˜ ์ฐธ์กฐ ํ•ด์ œ ํ•ด์•ผํ•˜๋Š” ํƒ€์ด๋จธ ๋˜๋Š” ํ•„์š”ํ•œ ์†Œ์ผ“์„ ์ฐพ์„ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. unref 'ed. ์‚ฌ๋žŒ๋“ค์—๊ฒŒ after ๋ฐ afterEach ํ›„ํฌ ๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ •๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

(๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด mocha๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” ์ „์—ญ "after"ํ›„ํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?)

์–ด์จŒ๋“  ๋„์›€์— ๊ฐ์‚ฌ ๋“œ๋ฆฌ๋ฉฐ Mocha์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

--expose-internals๋Š” ๋…ธ๋“œ <= 6์—์„œ๋งŒ ์ž‘๋™ํ•œ๋‹ค๊ณ  ์–ธ๊ธ‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™•์‹คํ•ฉ๋‹ˆ๊นŒ? Node 8.6.0์œผ๋กœ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  OS์—์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ๋‚ด๊ฐ€ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๋ชจ๋“  ์ƒ์ž๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์„ธ ๋ฒˆ ํ™•์ธํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํ™•์‹คํ•ฉ๋‹ˆ๊นŒ? Node 8.6.0์œผ๋กœ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  OS์—์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ๋‚ด๊ฐ€ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๋ชจ๋“  ์ƒ์ž๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์„ธ ๋ฒˆ ํ™•์ธํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋ชจ๋“ˆ์˜ ์ถœ๋ ฅ์„ ํŠธ๋ฆฌ๊ฑฐํ•œ๋‹ค๋Š” ์ ์—์„œ "์ž‘๋™"ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” Node.js ๋ฒ„์ „์— ๊ด€๊ณ„์—†์ด ๋งŽ์€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‚ฌ์ดํŠธ์— ๋ช‡ ๊ฐ€์ง€ ์—…๋ฐ์ดํŠธ๋ฅผ ์ถ”๊ฐ€ ํ•  ์˜ˆ์ •์ด์ง€๋งŒ # 3045์— ๋Œ€ํ•œ ํ–ฅํ›„ ๋Œ“๊ธ€์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์ด๊ฒƒ์€ ๋ชจ๋“ˆ์˜ ์ถœ๋ ฅ์„ ํŠธ๋ฆฌ๊ฑฐํ•œ๋‹ค๋Š” ์ ์—์„œ "์ž‘๋™"ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” Node.js ๋ฒ„์ „์— ๊ด€๊ณ„์—†์ด ๋งŽ์€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

setTimeout ๋ฐ setImmediate ๋Œ€ํ•œ ์œ ์šฉํ•œ ์Šคํƒ ์ถ”์ ์„ ์ œ๊ณตํ•˜์ง€๋งŒ ๋ฆฌ์Šค๋‹ ์„œ๋ฒ„์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์ž‘์—…์— ๋Œ€ํ•œ ์‹ค์ œ ์ •๋ณด๋Š” ์ „ํ˜€ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (์ตœ๊ทผ์— ๊ทธ๊ฒƒ์ด ๋ฌด์—‡์„ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ๋™์•ˆ ๋ฐœ๊ฒฌํ–ˆ๋“ฏ์ด ํ•˜๊ธฐ). ์š”์ ์˜ "async-dump"์˜ˆ์ œ๋Š” Node.js์˜ ์ตœ์‹  ๋ฒ„์ „์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ชจ๋“  ์ž‘์—… ( --expose-internals ํ•„์š” ์—†์Œ) ์ธก๋ฉด์—์„œ ์‹ค์งˆ์ ์ธ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ์ผ๋ฐ˜์ ์ธ ์กฐ์–ธ์€ "๋จธ๋ฆฌ๋ฅผ ๋ฝ‘์œผ๋ ค๋ฉด --exit ํ•˜๊ณ  ํœด์‹์„ ์ทจํ•˜์‹ญ์‹œ์˜ค"๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์Œ ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

ํ์‡„ ๋œ PR์— ๋Œ€ํ•ด ๋‹ค์‹œ ์–ธ๊ธ‰ํ•˜๊ฒŒ๋˜์–ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์‚ฌ์šฉ์ž ์นœํ™”์  ์ธ ์†”๋ฃจ์…˜์ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Ÿฌ๋„ˆ๊ฐ€ 3 ์ดˆ ์ •๋„ ์™„๋ฃŒ ํ•œ ํ›„ ๋ณ€๊ฒฝ๋œ ๋™์ž‘์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๋ฅผ ๊ธฐ๋ก ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
๋Ÿฌ๋„ˆ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„ setTimeout() ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  timeout.unref () ๋ฅผ ํ˜ธ์ถœ

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๊ณ ๋ คํ–ˆ์ง€๋งŒ ๊ทธ๊ฒƒ์ด ๊ธฐ์ž ๋˜๋Š” ๋‹ค๋ฅธ ํ†ตํ•ฉ์— ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ๊ฒƒ์ด๋ผ๋Š” ์ ์— ์กฐ์‹ฌ ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ๊ณ  why-is-node-running ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉด wtfnode๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๊ทธ ํŒจํ‚ค์ง€๋Š” ๋‚˜๋ฅผ ์œ„ํ•ด ํ›จ์”ฌ ๋” ์ž˜ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ‘์ž๊ธฐ ์ข…๋ฃŒ๋˜๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ๋‹นํ™ฉ ์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆด๋ฆฌ์Šค ์ •๋ณด ์— ์ƒˆ๋กœ์šด ๋™์ž‘์— ๋Œ€ํ•œ ์–ธ๊ธ‰์ด

๋‚˜๋Š” after () ํ•จ์ˆ˜์—์„œ redis.quit ()๋ฅผ ํ˜ธ์ถœํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ƒˆ๋กœ์šด ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์‹ค์ˆ˜๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐœ๊ฒฌํ–ˆ์œผ๋ฉฐ ์ •ํ™•ํ•˜๊ณ  ์ ์ ˆํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ์ƒˆ๋กœ์šด ๋™์ž‘์— ํ™•์‹คํžˆ ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฒˆ์—๋Š” [์ด ์š”์ ]์„ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ์ง€๋งŒ , ์ด๋ฏธ

๋‚˜๋Š”์ด ์ƒˆ๋กœ์šด ํ–‰๋™ ๋ณ€ํ™”์˜ ๋ฐฐํ›„์—์žˆ๋Š” ์ฐธ์กฐ ๋œ ํ‹ฐ์ผ“์˜ ๋ฌธ์ œ๋ฅผ ์ž˜ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ธ์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

AFAICT, ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ Promise ๊ฑฐ๋ถ€์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค๋ก€ํ•ฉ๋‹ˆ๋‹ค. Mocha ํ…Œ์ŠคํŠธ์— ์ฃผ์–ด์ง„ Promise๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ํ…Œ์ŠคํŠธ์—์„œ Mocha๊ฐ€ ์„ฑ๊ณตํ•˜์ง€๋„ ์•Š๊ณ  ๊ณ„์†๋˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค ( --bail ๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด). ๋”ฐ๋ผ์„œ ๊ฑฐ๋ถ€ ์ฒ˜๋ฆฌ๊ธฐ๊ฐ€์—†๋Š” ์ž˜๋ชป ๊ตฌํ˜„ ๋œ ์ค‘์ฒฉ ๋œ Promise ์—ฌ์•ผํ•˜์ง€๋งŒ ํฌํ•จํ•˜๋Š” ์ฝ”๋“œ๋Š” ์–ด์จŒ๋“  ํ•ด๊ฒฐ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ๊ฒƒ์ด Mocha์˜ ์—ญํ• ์ธ์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋งˆ๋ฒ•์„ ๊ตฌํ˜„ํ•˜๋Š” ์ „๋ฅ˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ๊ฒฝ์šฐ ๊ทธ๋ฆฌ๊ณ  (์ •ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑ) ์‹œํ—˜์€ ๋งˆ๋ฒ•ํ•ด์•ผํ•œ๋‹ค๊ณ  ๋ฌด๊ธฐํ•œ ์ค‘์ง€ ์˜ตํŠธ ์ธ ํ–‰๋™์ด ์•„๋‹ˆ๋ผ ํ•˜๋‚˜์˜ ์˜ตํŠธ ์•„์›ƒ - ์ฆ‰, --no-exit ๋ณด๋‹ค๋Š” --exit

๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์—ฐ๊ฒฐ์„ ํ’€๋งํ•˜๊ณ  .close() ์—์„œ ๋ชจ๋‘ ๋‹ซ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ณต์‹ node-mongodb-native ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ํ…Œ์ŠคํŠธ๋Š” ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ ์ข…์†์„ฑ์€ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค (๋˜๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์ข…๋ฃŒ ๋  ๋•Œ๊นŒ์ง€ ๋Š๋ฆฐ ์†Œ์ผ“์ด๋‚˜ ํŒŒ์ผ ์„ค๋ช…์ž๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ด ๋‚˜์œ ํ–‰๋™์ด๋ผ๋Š” ์‚ฌ์‹ค์„ ๋ฐ˜๋“œ์‹œ ์•Œ ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ฃ ?) ๊ทธ๋ž˜์„œ ์—ฌ๊ธฐ์„œ ๋ฌด์—‡์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด ์ฝ”๋“œ์ธ๊ฐ€์š”, ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ธ๊ฐ€์š”? ๋‚˜๋Š” ๋‚ด ์ž์‹ ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ ๋ถ„๋ช…ํžˆ ๊ทธ๋ ‡์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก , --exit ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค์Œ ์‚ฌ๋žŒ์€ ๊ทธ๋ ‡์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋Š ์ชฝ์ด๋“  ์™„๋ฒฝํ•˜๊ฒŒ ์ •๋ฐ€ํ•œ ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜์—ฌ ์™„๋ฒฝํ•˜๊ฒŒ ์ •๋ฐ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ณ  ์—ฌ์ „ํžˆ ์ž„์˜์˜ ์ข…์†์„ฑ ์›์ธ์ด์žˆ๋Š” ๊ฒƒ์€ ์ž˜๋ชป๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚ด ํ…Œ์ŠคํŠธ๋Š” ๋ฌด๊ธฐํ•œ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ after() ํ›„ํฌ์— process.exit() ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ํ…Œ์ŠคํŠธ๊ฐ€ ์ค‘๋‹จ๋˜์ง€ ์•Š์ง€๋งŒ --watch (๋‹ค๋ฅธ ๊ธฐ๋Šฅ ์ผ ์ˆ˜ ์žˆ์Œ)๋กœ ์ธํ•ด ๋”์ฐํ•˜๊ฒŒ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณด์ง€ ๋ชปํ•˜๋„๋ก ๋ง‰์ง€ ๋งŒ ์ปค์„œ๊ฐ€์—†๋Š” ์…ธ๋กœ ๋‚˜๋ฅผ ๋‚ด ๋ณด๋ƒ…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์—ฌ๊ธฐ์—์„œ ๋‹จ์„œ๊ฐ€์—†๋Š” ์‚ฌ๋žŒ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (ํ™•์‹คํžˆ ๋‚ด๊ฐ€ ์–ป์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์ด ๋งŽ๊ณ  ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ด€์—ฌํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค :)). ์ผ์ด๋ณ„๋กœ ... ๋งž์ง€ ...?

๊ฑด๋ฐฐ :)

ํŽธ์ง‘ :์ด ๋™์ž‘์„ ๊ฐ์•ˆํ•  ๋•Œ, ์‹คํ–‰๋˜์ง€ ์•Š๋‹ค๋ฉด ๋‚˜๋ฅผ ๋ชจ์นด ํ…Œ์ŠคํŠธ ๋‚ด๋ถ€ ํ™•์ธ์„ ์œ„ํ•ด ์–ด๋–ค ๋ฐฉ๋ฒ•์ด --watch ํ™•์ธ ์ „ํ™”ํ•˜์ง€ ๋‚ด๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋„๋ก process.exit() ์™€ ํœด์‹ ์ผ์ด?

@DanielSmedegaardBuus TL; DR on the solution : put --exit in the mocha.opts file . (์ด๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ Mocha๊ฐ€ ์‹คํ–‰๋  ๋•Œ ํ•ญ์ƒ ์„ค์ •ํ•ด์•ผํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ,๋ณด๋‹ค ์ผ๋ฐ˜์ ์ธ ํŒ์ž…๋‹ˆ๋‹ค.)์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช… : ์•„๋ž˜.

2640์€ ์•ฝ์† ๊ฑฐ๋ถ€์— ๊ด€ํ•œ ๊ฒƒ์œผ๋กœ, ์•„๋ฌด๊ฒƒ๋„ ํ•  ์˜๋„๊ฐ€ ์—†์ง€๋งŒ ์•ฝ์†์ด์—†๋Š” ๋น„๋™๊ธฐ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋™๊ธฐ ์˜ˆ์™ธ์™€ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋ฉฐ ์•„์ง ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค .

์ด๊ฒƒ์€ ์•ฝ์†์ด ๊ตฌํ˜„ ๋ฐ / ๋˜๋Š” ํ…Œ์ŠคํŠธ์—์„œ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ๋ฆฌ์†Œ์Šค, ์ฒญ์ทจ์ž ๋˜๋Š” ์ง„ํ–‰์ค‘์ธ ์ž‘์—…์„ ์„ค์ •ํ•˜๊ณ  ์ •๋ฆฌํ•˜์ง€ ์•Š๋Š” ํ…Œ์ŠคํŠธ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด :

์—ฐ๊ฒฐ ์—ด๊ธฐ ๋ฐ ๋‹ซ๊ธฐ๋ฅผ ํฌํ•จํ•˜๋Š” ์›น ์†Œ์ผ“์„ ๊ธฐ๋ฐ˜์œผ๋กœํ•˜๋Š” API์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด API๋Š” ๋ฒ„๊ทธ๊ฐ€ ๋งŽ์•˜๊ณ  ์—ฐ๊ฒฐ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋‹ซ์ง€ ์•Š์•˜์ง€๋งŒ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ธฐ๋ณธ ์—ฐ๊ฒฐ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ๋˜์—ˆ์Œ์„ ์ฃผ์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์‹ค์ œ๋กœ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค. (๋‚ด ์ž์‹ ์˜ ์ฝ”๋“œ ๋งŒ ์—„๊ฒฉํ•˜๊ฒŒ ํ…Œ์ŠคํŠธํ–ˆ๋‹ค๋ฉด ๋‚ด๊ฐ€ ์ž˜๋ชป ์ƒ๊ฐํ•œ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์ข…์†์„ฑ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‚ฌ์šฉ ์ •ํ™•์„ฑ ๋ฌธ์ œ๋ฅผ ํฌ์ฐฉํ•˜๊ธฐ ์œ„ํ•ด ์‹ค์ œ ์›น ์†Œ์ผ“์œผ๋กœ ์ •ํ™•ํ•˜๊ฒŒ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.) --no-exit ๋™์ž‘ (Mocha 3, ํ˜„์žฌ Mocha 4์˜ ๊ธฐ๋ณธ๊ฐ’)์œผ๋กœ ์ „ํ™˜ํ–ˆ์„ ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด Node๊ฐ€ ๋‹ซํžˆ์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. websocket ์—ฐ๊ฒฐ์ด ์—ฌ์ „ํžˆ ์ˆ˜์‹  ์ค‘์ž…๋‹ˆ๋‹ค.

(์˜ค๋ฅ˜๊ฐ€ ์ž์‹ ์˜ ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ์ข…์†์„ฑ์—์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์ง€๋งŒ ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ํ•ด๋‹น ์ข…์†์„ฑ์˜ ์ง€์ •๋œ ๋ฒ„์ „์„ ์ œ๊ณตํ•˜๊ธฐ ์ „์— ์•Œ๋ฉด ๊ฐ€์น˜๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ด๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ณด๋‹ค ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ์— ๋” ์ ํ•ฉํ•˜์ง€๋งŒ ์ด์ƒ์ ์œผ๋กœ๋Š” ํ”„๋กœ์ ํŠธ์— ๋‘ ๊ฐ€์ง€๊ฐ€ ๋ชจ๋‘ ์žˆ์Šต๋‹ˆ๋‹ค.)

๋ฌผ๋ก  ์ด๊ฒƒ์ด ํ•ญ์ƒ ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ์ด๋Ÿฌํ•œ ํŠน์„ฑ์˜ ๋ฆฌ์†Œ์Šค๊ฐ€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ ๋  ๋•Œ๊นŒ์ง€ ์‚ด์•„๋‚จ๋„๋ก ์˜๋„๋˜๊ฑฐ๋‚˜ ๋ฆฌ์†Œ์Šค์˜ ๋‹ค๋ฅธ ์ •๋ฆฌ๊ฐ€ ์‹ค์ œ๋กœ ์ค‘์š”ํ•˜์ง€ ์•Š๋”๋ผ๋„ ๋…ธ๋“œ๋ฅผ ์‚ด์•„์žˆ๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ณ„ ๋ฉค๋ฒ„๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ณ  ํ’€ ์ „์ฒด๋ฅผ ์ •๋ฆฌํ•  ํ•„์š”๊ฐ€์—†๋Š” ๋ฆฌ์†Œ์Šค ํ’€์˜ ์ผ๋ถ€์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ด ๊ฒฝ์šฐ --exit ๊ฐ€ ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค . ๊ธฐ๋ณธ ๋™์ž‘์„ ๋ณ€๊ฒฝ ํ•œ ์ด์œ ๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์˜ ๊ฐ€์‹œ์„ฑ์„ ๋†’์ด๊ธฐ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ „์—๋Š” --no-exit ๋ฅผ ์‹œ๋„ํ•˜๊ณ  ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์˜ค๋ฅ˜๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ฝ” ์•Œ์ง€ ๋ชปํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ–‰๋™์ด ์˜ณ๋‹ค๊ณ  ํŒ๋‹จ๋˜๋ฉด (๋˜๋Š” ์ ์–ด๋„ ๊ฑฑ์ •ํ•  ๊ฐ€์น˜๊ฐ€์—†๋Š”) --exit ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๊ทธ๋ƒฅ ๋งค๋‹ฌ๋ฆฌ๋Š” ๊ฒƒ์ด ๊ทธ๋‹ค์ง€ ์œ ์ตํ•˜์ง€ ์•Š์€ "์ˆ˜์ •"๋ฌธ์ œ๊ฐ€

์ฃ„์†ก ํ•ฉ๋‹ˆ๋‹ค๋งŒ, ๋งค์šฐ ๋‹ต๋‹ตํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ์นด๊ฐ€ ์™œ ๋‚˜์˜ค์ง€ ์•Š๋Š”์ง€ ์•Œ์•„ ๋‚ด๋ ค๊ณ  ํ–ˆ์–ด์š”. https://boneskull.com/mocha-v4-nears-release/#mochawontforceexit ๋งํฌ๊ฐ€ why-is-node-running ์ด๋ฏ€๋กœ ์ด์ œ๋Š” ํ•ด๋‹น ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ "์˜ค๋ฅ˜ : ๋ชจ๋“ˆ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ์•”ํ˜ธ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. internal / linkedlist '... (stack trace) ", ๊ทธ๋ฆฌ๊ณ  --expose-internals๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ์ฐพ์œผ๋ ค๊ณ  ํ† ๋ผ ๊ตฌ๋ฉ์„ ๋”ฐ๋ผ ๊ฐ€๋ฉด https://github.com/mochajs/mocha/์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ / 3045 ๋กœ ๊ฐ€์ • ๋œ ์†”๋ฃจ์…˜์„ ์ฐพ์„ ์ˆ˜ ์žˆ์ง€๋งŒ why-is-node-running ์€ (๋Š”) ์—ด๋ฆฐ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋Š” ์•Œ๋ ค์ง„ ํ•ธ๋“ค์ด 1 ๊ฐœ ์žˆ๊ณ  ์•Œ๋ ค์ง€์ง€ ์•Š์€ ํ•ธ๋“ค์ด ๋ช‡ ๊ฐœ ์žˆ๋‹ค๊ณ  ์•Œ๋ ค ์ฃผ์ง€๋งŒ ์•„๋ฌด๊ฒƒ๋„ ๋‚˜์—ดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•˜๊ธฐ์— ์ ํ•ฉํ•œ ์žฅ์†Œ๊ฐ€ ์•„๋‹ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, mocha์˜ ๋ฌธ์„œ๋Š” ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ ‡๊ฒŒ ๋งŽ์€ ์ธํ„ฐ๋„ท ๊ฒ€์ƒ‰ ๋ฐ ๋ฌธ์ œ ๋‹ค์ด๋น™์ด ํ•„์š”ํ•œ ์†”๋ฃจ์…˜์„ ๊ถŒ์žฅํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค . ๋‚˜๋Š” ์ผ๊ด€๋˜์ง€ ์•Š์€ ํ–‰๋™์œผ๋กœ ๋ฌผ๊ฑด์„ ๊บผ๋‚ด๊ณ  ์ถ”๊ฐ€ํ•˜๋ ค๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฏธ๋ž˜์˜ ์‚ฌ์šฉ์ž์™€ ์ œ ์ •์‹ ์„ ์œ„ํ•ด :

package.json :

"scripts": {
    "test": "mocha --exit"
}

๊ทธ๊ฒŒ ์ œ๊ฐ€ ํ•  ์ˆ˜์žˆ๋Š” ์ตœ์„ ์ž…๋‹ˆ๋‹ค.

@jeffvandyke ๊ท€ํ•˜์˜ ๋ถˆ๋งŒ์„ ์ดํ•ดํ•˜๊ณ  ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๊ฒช์—ˆ์ง€๋งŒ ์•ฝ์† ๋’ค์— ์–ด๋–ค ์ฃผ์žฅ์ด ์žˆ๋‹ค๋ฉด์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๊ฐ์‚ฌ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋น„์ •์ƒ์ ์ธ ๋น„๋™๊ธฐ ๋™์ž‘์„ ๊ฐ€์ง„ ๋งŽ์€ ์‚ฌ์–‘์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์‚ฌ์–‘์˜ ์‹คํ–‰ ์ˆœ์„œ์— ๋”ฐ๋ผ ์žกํžˆ์ง€ ์•Š์€ ์•ฝ์† ๊ฑฐ๋ถ€ ์˜ค๋ฅ˜๊ฐ€ ์ฝ˜์†”์— ๊ธฐ๋ก ๋œ ๋‹ค์Œ ํ†ต๊ณผ ํ•œ ์ˆ˜๋ฐฑ ๊ฐœ์˜ ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ์— ์˜ํ•ด ๋ณด์ด์ง€ ์•Š๊ฒŒ ์Šคํฌ๋กค๋˜๊ฑฐ๋‚˜ ๊ฑฐ๋ถ€๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์ „์— ๋…ธ๋“œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

, ์ œ๊ฑฐ ํ›„ --exit ์—์„œ ๋‚ด mocha.opts , ๊ฑฐ๋ถ€ ๋œ ์•ฝ์†์ด ์•ˆ์ •์ ์œผ๋กœ ์˜ค๋ฅ˜๋ฅผ ๊ธฐ๋กํ•˜๊ณ , ๊ทธ ๋ฒ„๊ทธ๋ฅผ ๊ฐ•์กฐํ•œ๋‹ค.

๋งŽ์€ ๊ณต์œ  ๊ณ ํ†ต์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค :) Mocha์˜ ๋ฌธ์„œํ™” ๋œ ๋™์ž‘์€ ์‹ค์ œ๋กœ ๋‚˜์—๊ฒŒ ์˜ณ์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ์ง€๋งŒ 5 ํ…Œ์ŠคํŠธ๊ฐ€ ์ถฉ๋ถ„ํžˆ ๊ฐ„๋‹จ ํ•ด ๋ณด์ด์ง€๋งŒ node-fetch๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API๋ฅผ ํ…Œ์ŠคํŠธ ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์™œ mocha๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค . ๋ชจ๋‘ ์„ฑ๊ณต์ ์œผ๋กœ ํ†ต๊ณผํ•˜๋”๋ผ๋„ (์˜ˆ, ์‹คํŒจ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค). why-is-node-running ์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ์•Œ์•„ ๋‚ด๋ ค๊ณ  ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์•  ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ์— ๋Œ€ํ•ด ๋ฉ์ฒญ์ด์— ์ง€์ณ์„œ ์ง€๊ธˆ์€ ํœด์‹์„ ์ทจํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์•„๋งˆ ๊ทธ๊ฒƒ์„ ๊ณ„์† ๊ฐ€์ง€๊ณ  ๋†€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋‚˜๋Š” ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์—ด โ€‹โ€‹์ˆ˜๋„ ์žˆ์ง€๋งŒ ์•ฝ์†์€ ์—†์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ๋…ธ๋“œ ๊ฒ€์‚ฌ๊ธฐ์˜ ๋””๋ฒ„๊ฑฐ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค ... ์ข‹์€ ๋น„๋™๊ธฐ ์ถ”์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ด! wtfnode ๊ฐ€ ์ด๊ฒƒ์— ๋Œ€ํ•ด ๋น›์„ result.text() ๋˜๋Š” .json() ๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ•˜๋ฉฐ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์—ฐ๊ฒฐ์ด ์—ด๋ฆฐ ์ƒํƒœ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. wtfnode ./node_modules/.bin/_mocha ํ•˜๊ณ  Ctrl-C๋ฅผ ๋ˆ„๋ฅด๋ฉด ์—ด๋ฆฐ ์—ฐ๊ฒฐ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋ฌธ์„œ๊ฐ€ why-is-node-running ๋Œ€์‹ ์ด ํŒจํ‚ค์ง€๋ฅผ ๊ถŒ์žฅํ–ˆ๋‹ค๋ฉด ๋” ์‰ฌ์› ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์ œ์•ˆ : ๋ชจ์นด๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ค ์ข…๋ฅ˜์˜ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ›๋Š” @andywer ์˜ ์•„์ด๋””์–ด๊ฐ€ ์ •๋ง ๋งˆ์Œ์— wtfnode ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚œ ํ›„์—๋„ ๋…ธ๋“œ๋ฅผ ์œ ์ง€ํ•˜๋Š” ํ™œ์„ฑ ํ•ธ๋“ค์„ ๋‚˜์—ด ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ณ์€ ๊ฒƒ์ด ๋ฌด์—‡์ด๋“ ๊ฐ„์— ๋ชจ์นด๊ฐ€ ์™œ ๋‚˜์˜ค์ง€ ์•Š๋Š”์ง€ ์•Œ์•„ ๋‚ด๊ธฐ ์œ„ํ•ด ์—ฌ๊ธฐ๊นŒ์ง€ ๋ด์•ผํ•˜๋Š” ๊ฒƒ์€ ์“ฐ๋ ˆ๊ธฐ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์–ด์จŒ๋“ , ๋‚˜๋Š” ๋‚ด ์ œ์•ˆ์„ ์ฃผ์—ˆ๋‹ค :)

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„,
์ด ๊ธฐ๋Šฅ์ด ์—ฌ์ „ํžˆ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ œ๊ฐ€ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํ…Œ์ŠคํŠธ์ด๋ฉฐ ๋ชจ์นด๋Š” ์—ฌ์ „ํžˆ ์ž์ฒด์ ์œผ๋กœ ์ข…๋ฃŒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. --no-exit ์€ (๋Š”) ํ›Œ๋ฅญํ•œ ๊ธฐ๋ณธ ์˜ต์…˜์ด๋ฉฐ ๋‚˜๋Š” ๋ชจ๋“  ๊ฒƒ์„ ๋‹คํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋‚ด๊ฐ€ ๋ญ˜ ์ž˜๋ชปํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๊ฑฐ๋‚˜ ๋ชจ์นด์— ๋ณธ์งˆ์ ์œผ๋กœ ์ž˜๋ชป๋œ ๊ฒƒ์ด ์žˆ๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ๋„ ์ข…๋ฃŒํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

describe('describe', function() { it('it', function(done) { done(); }); });

์š”์•ฝ : --exit ๋Š” ์ž‘๋™ํ•˜์ง€๋งŒ --no-exit ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ข…๋ฃŒ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ œ ๊ฒฝ์šฐ์—๋Š” Koa ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ Mocha 4 + Supertest๋กœ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

"์˜คํƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ๋” ๋‚˜์€ ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•์„ ์žฅ๋ คํ•˜๊ธฐ ์œ„ํ•ด"๋ฆด๋ฆฌ์Šค ๋…ธํŠธ์— ๋”ฐ๋ผ done ํ˜ธ์ถœ๊ณผ ํ•จ๊ป˜ ์„œ๋ฒ„๋ฅผ ๋‹ซ์•„์•ผํ–ˆ์Šต๋‹ˆ๋‹ค .

์ „์—:

request(app.listen())
  .post('/')
  .send(requestSrc)
  .expect({ f: {} }, done)

ํ›„:

const server = app.listen()

request(server)
  .post('/')
  .send(requestSrc)
  .expect({ f: {} }, () => {
    server.close()
    done()
  })

์†Œ ๋ฉ”๋…ธ์— ๋„์›€์ด๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋งค ํ…Œ์ŠคํŠธ ์ „์— ๋ชจ์นด์— ๋Œ€ํ•œ ๋ถ€ํŠธ ์ŠคํŠธ๋žฉ์„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋™์ผํ•œ ํ”„๋กœ์„ธ์Šค์—์„œ ์•ฝ๊ฐ„์˜ HTTP ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Mocha๊ฐ€ ์‹คํ–‰์„ ๋ฉˆ์ถ˜ ํ›„ ์ข…๋ฃŒ ํ•  ์ˆ˜์žˆ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ƒฅ ์ข…๋ฃŒํ•˜๊ณ  ์‹ถ์ง€๋งŒ ๊ทธ ๋•Œ๋งŒ.

์ด ๊ธฐ๋Šฅ ๋’ค์—์žˆ๋Š” ์•„์ด๋””์–ด๊ฐ€ ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค. btw .. ๋งค๋‹ฌ๋ฆฐ ์ด๋ฒคํŠธ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ข‹์€ ํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

@evert after ์—์„œ ์„œ๋ฒ„๋ฅผ ๋‹ซ๋Š” ๊ฒƒ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

๋ชจ์นด๊ฐ€ ๋๋‚œ ํ›„ ์‹คํ–‰๋˜๋Š” ๊ธ€๋กœ๋ฒŒ '์‚ฌํ›„'๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋†“์ณค์„์ง€๋„ ๋ชจ๋ฅธ๋‹ค! ๋ฌธ์„œ์—์„œ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์˜ˆ, ๊ธ€๋กœ๋ฒŒ after ํ›„ํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋†“์ณค๋‹ค, ๋ฏธ์•ˆํ•˜๋‹ค : / ctrl-f์— ๋Œ€ํ•œ ์šฉ์–ด๋ฅผ ๋ชฐ๋ž๋‹ค.

wtfnode ๋Š” ๋‚˜๋ฅผ ์œ„ํ•ด ์‹ค์ œ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ์€ ๋ชจ์นด๋กœ ์‹œ์ž‘๋œ ์ผ๋ถ€ PID๊ฐ€ ๋งค๋‹ฌ๋ ค ์žˆ๋‹ค๋Š” ๊ฒƒ๋ฟ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— @boneskull ์š”์ง€๋Š” https://github.com/mochajs/mocha/issues/3044#issuecomment -351299745์—์„œ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

wtfnode ๋Š” mocha ์•„๋‹ˆ๋ผ _mocha ์— ๋Œ€ํ•ด ์‹คํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

--exit ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ๊ทธ๊ฒƒ์„ ๊ณ ์ณค์Šต๋‹ˆ๋‹ค.

package.json์— ๋‹ค์Œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค.
"์Šคํฌ๋ฆฝํŠธ": {
"test": "mocha --exit"
}

์ด ์Šค๋ ˆ๋“œ์—์„œ ์–ธ๊ธ‰ ํ•œ ๋‹ค์–‘ํ•œ ์น˜๋ฃŒ๋ฒ•์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์™œ ๋…ธ๋“œ ์‹คํ–‰์ด ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค
  • wtfnode๊ฐ€ ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•˜์ง€๋งŒ ์ฝ”๋“œ์—์„œ ํŒŒ์ผ ์„ค๋ช…์ž / ์†Œ์ผ“ / ์„œ๋ฒ„ / ํƒ€์ด๋จธ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • async_hooks ๋””๋ฒ„๊ทธ ๋ฉ”์„œ๋“œ ์˜ค๋ฅ˜
  • mocha cmd ๋ผ์ธ ํ”Œ๋ž˜๊ทธ์— โ€“exit๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ @ProfJigsaw๋ฅผ ๋”ฐ๋ฅด๊ณ  โ€“exit๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๊ฒŒ ์ œ๊ฐ€ํ•˜๋Š” ์ผ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๋ชจ์นด์— ์˜ํ•œ ๊ฐœ์„ ์ด ์žˆ๋‹ค๋ฉด, ์ ์–ด๋„ ๋ฌธ์ œ๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€, ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋‚ด๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋ฐ”๋กœ ๋””๋ฒ„๊ฑฐ์˜ ๋ชฉ์ ์ž…๋‹ˆ๋‹ค. ์ž์‹ ์˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ๋””๋ฒ„๊ทธํ• ๊นŒ์š”?

https://github.com/GoogleChromeLabs/ndb ๋Š” ๋ฉ‹์ง„ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

์ฃผ์ œ์—์„œ ๋ฒ—์–ด๋‚จ :์ด ํ‹ฐ์ผ“์ด ๊ณ„์† ์ œ๊ณต๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ๋„๊ตฌ์— ๋Œ€ํ•œ ์ •๋ณด ๋งŒ ์žˆ์œผ๋ฉด์ด ํ‹ฐ์ผ“์ด ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค! :)

@borisovg ์‹ค์ œ๋กœ ํ•ด๊ฒฐ์ฑ…์„ ์ œ๊ณตํ–ˆ๋‹ค๋ฉด์ด ํ‹ฐ์ผ“์ด ์–ผ๋งˆ๋‚˜
@boneskull ๋‚ด๊ฐ€ ์•Œ์ง€ ๋ชปํ•˜๋Š” "list File descriptors / Sockets / Servers / Timer"๋””๋ฒ„๊ฑฐ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@mjgs ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ํ•œ - wtfnode ์ผ์„ํ•˜์ง€๋งŒ ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ _mocha ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์•„๋‹Œ mocha ํ•˜๋‚˜

$ wtfnode ./node_modules/.bin/_mocha my-shitty-code.spec.js 


  tests
    โœ“ some test


  1 passing (5ms)

^C[WTF Node?] open handles:
- File descriptors: (note: stdio always exists)
  - fd 1 (tty) (stdio)
  - fd 2 (tty) (stdio)
- Servers:
  - :::8080 (HTTP)
    - Listeners:
      - request: (anonymous) @ /home/borisov/test/my-shitty-code.js:4
- Intervals:
  - (5000 ~ 5 s) (anonymous) @ /home/borisov/test/my-shitty-code.js:8

@borisovg ์ •๋ง ํ›Œ๋ฅญํ•œ ์˜ˆ๋ฅผ ๋“ค์–ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” wtfnode๊ฐ€ mongo ์—ฐ๊ฒฐ์ด ์—ด๋ ค ์žˆ์Œ์„ ๋ณด์—ฌ ์ฃผ์ง€๋งŒ my-shitty-code.js์˜ ๋ชจ๋“  mongo ์—ฐ๊ฒฐ์ด ๋‹ซํ˜”์œผ๋ฏ€๋กœ ๋ฌธ์ œ๋Š” ๋‹ค๋ฅธ ๊ณณ์—์„œ ์™”์œผ๋ฉฐ wtfnode๋Š” ๊ทธ๊ฒƒ์ด ์–ด๋””์— ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ถฉ๋ถ„ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค ์—์„œ.

wtfnode๊ฐ€ mongo db ์—ฐ๊ฒฐ์ด ์—ด๋ ค ์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋ฉด ์—ด๋ฆฐ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ ๊ทธ๊ฒƒ์ด ํ‹€๋ ธ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?

@evert ๋‚˜๋Š” ๋‹น์‹ ์ด ๋‚ด๊ฐ€ ์“ด ๊ฒƒ์„ ์ž˜๋ชป ํ•ด์„ํ–ˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ตœ์†Œํ•œ์˜ ์˜ˆ์ œ๋Š” ์„ค๋ช…์— ์ ํ•ฉํ•˜๋ฉฐ ์‹ค์ œ๋กœ๋ณด๊ณ ์žˆ๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ์ถœ๋ ฅ์„ ๋ณด๋Š” ๊ฒƒ์ด ์œ ์šฉํ•˜์ง€๋งŒ ์ˆ˜๋…„์— ๊ฑธ์ณ ์ž‘์„ฑ๋œ ์‹ค์ œ ์ฝ”๋“œ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์—ฐ๊ฒฐ์„ ์ฐพ๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชฝ๊ณ  ์—ฐ๊ฒฐ์ด ์•„์ง ์—ด๋ ค ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•„๋Š” ๊ฒƒ์ด ์ข‹์ง€๋งŒ ์‹ค์ œ๋กœ ์ฐพ๋Š” ๊ฒƒ์€ ์‚ฌ์†Œํ•œ ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ์—ด๋ฆฐ ์—ฐ๊ฒฐ์„ ๋ฐœ๊ฒฌํ–ˆ์ง€๋งŒ ๋ชจ๋“  ์—ฐ๊ฒฐ์ด ํ™•์ธ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋‹ซํžŒ ํ‘œ๋ฉด ์ˆ˜์ค€๋ณด๋‹ค ์ฝ”๋“œ์—์„œ ํ›จ์”ฌ ๋” ๊นŠ์—ˆ์Šต๋‹ˆ๋‹ค. ํฌํŠธ ๋ฒˆํ˜ธ๋งŒ์œผ๋กœ ์ถ”์ ํ•ด์•ผ ํ•  ๋ถ€๋ถ„์ด ์•„์ง ๋‚จ์•„ ์žˆ์ง€๋งŒ ํฌ๋ง์ ์ž…๋‹ˆ๋‹ค.

Firebase์™€ ํ†ต์‹ ํ•˜๋Š” ์„œ๋ฒ„๋ฆฌ์Šค ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ”๋กœ์ด ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž SDK๊ฐ€ ๋ฌด์ œํ•œ์œผ๋กœ ์—ด๋ฆฐ ํ•ธ๋“ค์„ ์œ ์ง€ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. ์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ (๋ฐ wtfnode ์‚ฌ์šฉ์— ๋Œ€ํ•œ ํ›„์† ์ œ์•ˆ์œผ๋กœ ์ธํ•ด ๊ทธ ์‚ฌ์‹ค์„ ํ™•์ธํ•˜๊ณ  ๊ธธ์„ ์žƒ๋Š” ๋งŽ์€ ๋‘ํ†ต (๋ฐ ๋น„์šฉ)์„ ์ ˆ์•ฝ ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ œ ์ƒ๊ฐ์—๋Š” "๋งŒ์•ฝ X๊ฐ€ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ  ์–ด๋–ค ์ถœ๋ ฅ๋„ ํ‘œ์ค€ ์ถœ๋ ฅ์— ํ…์ŠคํŠธ๋ฅผ ๋˜์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ"๋กœ์ง์„ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ์–ผ๋งˆ๋‚˜ ํƒ€๋‹นํ•˜๊ฑฐ๋‚˜ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋Œ€์—ญํญ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๊ฐœ์„ ์„ ์ด๋ฃฐ ์ˆ˜ ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ "wtf๊ฐ€ ๋‚ด ๋ชจ์นด์—์„œ ์ง„ํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค!"๋ผ๋Š” ์ดˆ๊ธฐ ๋ถˆ๋งŒ์„ ์™„ํ™”ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

var timers = sinon.useFakeTimers({
    now: new Date().getTime(),
    shouldAdvanceTime: true,
});

timers.restore(); ์žŠ์–ด ๋ฒ„๋ฆฌ๋ฉด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์˜์›ํžˆ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

@pgilad ๊ฐ€ ์—ฌ๊ธฐ์— ๋ณด๋‚ธ ๋ฌธ์„œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‚˜์—๊ฒŒ ๋” ๊นจ๋—ํ•œ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์˜คํƒ์„ ํ”ผํ•˜๊ณ  ๋” ๋‚˜์€ ํ…Œ์ŠคํŠธ ๊ด€ํ–‰์„ ์žฅ๋ คํ•˜๊ธฐ ์œ„ํ•ด Mocha๋Š” ์‹คํ–‰์ด ์™„๋ฃŒ๋˜์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•  ๋•Œ ๋” ์ด์ƒ process.exit ()๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ ์Šค์Šค๋กœ๋ฅผ ์ฃฝ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฒญ์†Œ๊ธฐ ์†”๋ฃจ์…˜์€ ๋‹ค์Œ ๊ธ€๋กœ๋ฒŒ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค after ๊ธฐ๋Šฅ (AN after ๋ฅผ ๋ฒ—์–ด๋‚œ describe ๊ธฐ๋Šฅ), ๋‚ด๊ฐ€ ์ข‹์•„ํ•˜๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ์— ์ถ”์ฒœ์„ exit-mocha.js ๋˜๋Š” exit-mocha . ๋‹ค์Œ์— ์ „์†ก๋˜๋Š” ์ฝœ๋ฐฑ์€ ์˜ค๋ฅ˜์—†์ด ์ข…๋ฃŒ ๋  ์ •์ƒ ๋…ธ๋“œ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ๋ฅผ ๊ฐ•์ œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์€ ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ ํŒŒ์ผ ์ธ ๊ฒƒ์ฒ˜๋Ÿผ mocha cli๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ( --exit ํ”Œ๋ž˜๊ทธ๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ•  ์ˆ˜ ์žˆ์Œ).

exit-mocha.js ๋˜๋Š” exit-mocha

after('Exit mocha gracefully after finishing all tests execution'. function () {
  // Exit node process
  process.exit();
});

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ mocha ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

mocha exit-mocha test/**/*.spec.js

๋˜๋Š”

mocha exit-mocha.js test/**/*.spec.js

test/**/*.spec.js ํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ํ…Œ์ŠคํŠธ ํŒŒ์ผ ์ด๋ฆ„์— ์™€์ผ๋“œ ์นด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ exit-mocha ํŒŒ์ผ์˜ ์ด๋ฆ„์ด ์™€์ผ๋“œ ์นด๋“œ ํŒจํ„ด๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์ด "๊นƒ๋ฐœ"๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

@ vctr90 ์˜ˆ์ œ์— ์‰ผํ‘œ๊ฐ€ ์žˆ์–ด์•ผํ•˜๋Š” ๋งˆ์นจํ‘œ๊ฐ€ ์žˆ์ง€๋งŒ ํ›Œ๋ฅญํ•œ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ชจ๋“  ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ ๊ณจํ”„๋ฅผ ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

after('Exit mocha gracefully after finishing all tests execution', process.exit);

๊ฐœ๋ฐœ์ž๊ฐ€ Mocha์— ์ด๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์™œ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ์ƒ์ฒ˜๋ฅผ ์ฃผ๋Š”์ง€์— ๋Œ€ํ•ด ์ฐจ์ž„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? (๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋ถ„๋ช…ํžˆ ๋„์›€์ด ๋  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค)?

@machineghost ๋‚˜๋Š” ๋‘ ๊ฐ€์ง€ ์ด์œ ๋กœ ์ƒˆ๋กœ์šด ๋™์ž‘์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

  1. '์ž‘์—… ์™„๋ฃŒ'ํ›„์—๋Š” ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๊ฑฐ์˜ ์ข…๋ฃŒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋…ธ๋“œ TCP ์„œ๋ฒ„๋ฅผ ๋‹ซ์•„๋„ ์ž๋™์œผ๋กœ ์ข…๋ฃŒ๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋…ธ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š์œผ๋ฉด ํ•ด๊ฒฐ ๋Œ€๊ธฐ์ค‘์ธ ์ด๋ฒคํŠธ๊ฐ€ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ํ›„์— ๋ชจ๋“  ๊ฒƒ์ด ์ •๋ฆฌ๋˜๋„๋ก ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ์žˆ์Œ์„ ์‹œ์‚ฌ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ œ๊ฐ€์ด ๋ฌธ์ œ์— ๋ถ€๋”ชํ˜”์„ ๋•Œ, ์ด๊ฒƒ์ด ์ œ ์ฝ”๋“œ๋ฅผ ์ •๋ฆฌํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์—ฌ ์ผ์–ด๋‚˜์ง€ ์•Š๋„๋กํ•˜๋Š” ์ธ์„ผํ‹ฐ๋ธŒ์ž…๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ๊ด€์ ์€ '๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์— ๋Œ€ํ•ด ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค'๋˜๋Š” '๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ˆ˜์ •ํ•  ๊ฐ€์น˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค'์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์นดํ…Œ๊ณ ๋ฆฌ์— ์†ํ•œ๋‹ค๋ฉด ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ mocha.opts ๋ฅผ ๋งŒ๋“ค๊ณ  --exit ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์‹ ํ˜ธ๊ฐ€ ์•„๋‹Œ ๋” ๋งŽ์€ ์†Œ์Œ์„๋‚ด๋Š” ๊ฒƒ์— ๊ด€ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ Mocha๊ฐ€ ๋๋‚ฌ๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ฌด๋„ ์•ฑ์ด ์ข‹์•„์ง€์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Mocha๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ์„ค์ •๋˜๋ฉด ํ…Œ์ŠคํŠธ (๋ฐ ๋ชจ๋“  after / afterEach ํ˜ธ์ถœ)๊ฐ€ ์™„๋ฃŒ ๋  ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์—๊ฒŒ "๋‹น์‹ ์˜ ์ธ๊ณต ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์ด ์ธ์œ„์ ์ž…๋‹ˆ๋‹ค"๋ผ๊ณ  ๋งํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ๋Œ€๋‹ค์ˆ˜ (๋˜๋Š” ์ƒ๋‹น์ˆ˜) ์‚ฌ์šฉ์ž์—๊ฒŒ ์ด์ต์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์ด ์ •๋ง ๋‹ซํžˆ์ง€ ์•Š์€ ์—ฐ๊ฒฐ์„ ๋””๋ฒ„๊น… ํ•  ๊ฒฝ์šฐ ๋‹ค์Œ์€ ๋‹น์‹ ์ด์— ๋Œ€ํ•œ ์˜ต์…˜์„ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ์ด์–ด์•ผํ•œ๋‹ค ๋ณด์ธ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋จธ์ง€ ๋ชจ๋“  ์‹œ๊ฐ„ ๋™์•ˆ ๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์„ "๋‹น์‹ ์€ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์— ์žˆ๊ณ  10 ์–ต ๊ฐœ์˜ ๊ฐ€๋Šฅํ•œ ๊ฒƒ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค"๋กœ ํ˜ผ๋™ํ•˜๋Š” ๊ฒƒ์ด ๋„์„œ๊ด€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ •๋ง๋กœ ์œ ์ตํ•ฉ๋‹ˆ๊นŒ?

์ด๋กœ ์‹คํ–‰์ด์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์˜ 99 %๊ฐ€ ๋งํ•˜๋ ค๊ณ ํ•˜๋Š” ๊ฒฝ์šฐ, ๋‹ฌ๋ฆฌ ๋งํ•˜๋ฉด "๋‹จ์ง€ ์‚ฌ์šฉ์„ --exit "์–ด์ฉŒ๋ฉด --exit ๋‹น์‹ ์ด์ด ํŠน๋ณ„ํ•œ ์˜ต์…˜ ์•ˆ ์ œ๊ณต ... ์•„๋งˆ๋„ ๊ธฐ๋ณธ ๋™์ž‘์€ ์‚ฌ์šฉ์ž ์‚ฌ๋ก€์˜ 99 %๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด์–ด์•ผํ•ฉ๋‹ˆ๊นŒ (๋ฌผ๋ก  ์‚ฌ์šฉ์ž์—๊ฒŒ --tell-me-if-I-have-unclosed-stuff-in-my-testing-environment-and-that-is-actually-what-i-am-trying-to-find-out ์˜ _option_์„ ์ œ๊ณตํ•จ)?

๋‚ด ๋ง์€, ๋งŒ์•ฝ ๋‹น์‹ ์ด ๊ทธ ์˜ต์…˜์„ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด, ํ˜„์‹ค์ ์œผ๋กœ ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๊ฒƒ์„ ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ํ†ต๊ณผ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?

์ถ”์‹  : ๋ฐฉ๊ธˆ https://stackoverflow.com/questions/54999115/where-to-destroy-knex-connection์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๋‹ต๋ณ€์„ ๋ณด๋ฉด Mocha ์˜์ด ํ–‰๋™์œผ๋กœ ์ธํ•ด ์ ์–ด๋„ ํ•œ ๋ช…์˜ ์‚ฌ์šฉ์ž (์ €๊ฐ€ ์•„๋‹˜์„ ๋งน์„ธํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ๋งˆ์ง€๋ง‰ ๊ฒŒ์‹œ๋ฌผ์„ ์ž‘์„ฑํ•œ ํ›„ ์šด์ด ์ข‹๊ฒŒ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค)๊ฐ€ ์ž˜๋ชป ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ์ฝ”๋“œ (์ด "๊ธฐ๋Šฅ"๋กœ ์ธํ•ด ์•ฑ์—์„œ knex.destroy() ๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ•œ๋‹ค๊ณ  ์ž˜๋ชป ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค).

์š”์•ฝ ๋ฒ„์ „ :

์ข‹์€ ์‚ฌ๋žŒ : ์ผ๋ฐ˜์ ์œผ๋กœ knex.destroy ()๋ฅผ ๋ช…์‹œ ์ ์œผ๋กœ ํ˜ธ์ถœ ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฌธ์„œ ์ž์ฒด์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์•”์‹œํ•ฉ๋‹ˆ๋‹ค.

์ข‹์€ ์‚ฌ๋žŒ : ์ธ์šฉ ๋ฌธ์„œ

ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ์‚ฌ๋žŒ : knex.destroy ()๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋ช…์‹œ ์ ์œผ๋กœ knex.destroy ()๋ฅผ ํ˜ธ์ถœ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์€ ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

์ข‹์€ ์‚ฌ๋žŒ : ์•„, ๋‹น์‹ ์€ ์ด๊ฒƒ์ด ๋ชจ์นด๋ฅผ์œ„ํ•œ ๊ฒƒ์ด๋ผ๊ณ  ๋‹ค๋ฅธ ๊ณณ์—์„œ๋งŒ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์„œ๋ฒ„ ์‚ฌ์šฉ์˜ ๊ฒฝ์šฐ ์—ฐ๊ฒฐ ํ’€์„ ํ•ด์ฒด ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Mocha์˜ ๊ฒฝ์šฐ ๊ธ€๋กœ๋ฒŒ ํ•ด์ฒด ํ›„ํฌ๋ฅผ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. futurestud.io/tutorials/โ€ฆ

ํ•˜์ง€๋งŒ ๋ถ„๋ช…ํžˆ์ด ์‚ฌ์šฉ์ž๋Š” ์ž‘์—… ํ™˜๊ฒฝ์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๊ณ , Mocha (๋ณธ์งˆ์ ์œผ๋กœ)๊ฐ€ ์™„๋ฒฝํ•˜๊ฒŒ ์ข‹์€ ์ฝ”๋“œ๊ฐ€ ์ž˜๋ชป๋˜์—ˆ๋‹ค๊ณ  ๋งํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ๊ฒฐ์„ ๋Š์Œ์œผ๋กœ์จ ์ƒ์„ฑ ํ•œ ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ๋‹จ์ง€์ด ํ•˜๋‚˜์˜ ๋ถˆ์šด ๊ณต๊ณต ์žฅ์†Œ์—์„œ ๊ทธ๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ์‚ฌ๋žŒ, ๋ˆ„๊ฐ€ ๋‚ด๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋˜์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ, ์ œ๊ฐ€ ์ „๋‹ฌํ•˜๊ณ ์žํ•˜๋Š” ๊ฒƒ์€, ์ด๊ฒƒ์€ ๋‹จ์ง€ ์ฒ ํ•™์ ์œผ๋กœ ์˜ณ์€ ๊ฒƒ์— ๊ด€ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ผ๋ถ€ ์†Œ์Œ์ด ์œ ์šฉํ•œ ์‹ ํ˜ธ๋ฅผ ๊ฐ€๋ฆฌ๋Š” ๊ฒƒ๋„ ์•„๋‹™๋‹ˆ๋‹ค.์ด ํ–‰๋™์€ ์‹ค์ œ๋กœ ํ•ด๋ฅผ ๋ผ์น˜๊ณ  ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๊ธฐ์šธ์ด๋Š” ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํ’์ฐจ์—์„œ.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ํ”ผ๊ณคํ•œ ์ ์„ ์ •์งํ•œ ์งˆ๋ฌธ์œผ๋กœ ์ฐฉ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋‹ต์„ ํ›„ํšŒํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€์ด ์Šค๋ ˆ๋“œ๋ฅผ ์ž ๊ธ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"mocha --reporter mocha-allure-reporter ./tests/controllers --exit" ๊ฐ€) ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ --exit ๋Š” ์•„์ฃผ ์ข‹์€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋‚ด ํ”„๋กœ์ ํŠธ์—์„œ ๋ฒ„์ „ 5.2.0 ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

mocha "๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•  ๋•Œ --exit ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™๋“ฑํ•œ ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?"

exit / noexit์— ๋Œ€ํ•œ ๋ฌธ์„œํ™” ๋œ ์˜ต์…˜์ด๋‚˜ NodeJS API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋™์•ˆ ํ”Œ๋ž˜๊ทธ ๋ฌธ์ž์—ด์„ ์ „๋‹ฌํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์˜ต์…˜์˜ ํŒจํ„ด์— ๋”ฐ๋ผ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

const mocha = new Mocha({
    exit: true,
});

๊ทธ๋Ÿฌ๋‚˜ ์›ํ•˜๋Š” ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/mochajs/mocha/blob/master/lib/mocha.js์˜ ์ปค์„œ ๊ฒ€์‚ฌ๋Š”์ด ์˜ต์…˜์ด ๋ฌธ์„œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์†Œ์Šค์—๋„ ์ถ”๊ฐ€๋˜์–ด์•ผ ํ•จ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๋น ๋ฅธ ์ˆ˜์ • ( --exit ์‚ฌ์šฉ)์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ ์™ธ์— ๊ฒฐํ•จ์ด์žˆ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ฐพ๋Š” ํ•ต์‹ฌ ๋ฌธ์ œ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋งก๊ฒผ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ง€๊ธˆ ๋‚˜ ์ž์‹ ์ด ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ์ง€๋งŒ ๋ฉ”์ด์ € ๋ฒ„์ „์„ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•  ๋•Œ ๋งน๋ชฉ์ ์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์ง€ ๋ง๊ณ  ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ๋ฅผ ์ฝ์œผ์‹ญ์‹œ์˜ค.

์ •ํ™•ํžˆ ์–ด๋–ป๊ฒŒ ํ†ต๊ณผํ•ฉ๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ๋‚ด package.json ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค.

"scripts": { "test": "istanbul cover node_modules/mocha/bin/_mocha --exit test/Testcases/ " } ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋น ๋ฅธ ์ˆ˜์ • ( --exit ์‚ฌ์šฉ)์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ ์™ธ์— ๊ฒฐํ•จ์ด์žˆ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ฐพ๋Š” ํ•ต์‹ฌ ๋ฌธ์ œ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋งก๊ฒผ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ง€๊ธˆ ๋‚˜ ์ž์‹ ์ด ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ์ง€๋งŒ ๋ฉ”์ด์ € ๋ฒ„์ „์„ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•  ๋•Œ ๋งน๋ชฉ์ ์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์ง€ ๋ง๊ณ  ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ๋ฅผ ์ฝ์œผ์‹ญ์‹œ์˜ค.

์ •ํ™•ํžˆ ์–ด๋–ป๊ฒŒ ํ†ต๊ณผํ•ฉ๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ๋‚ด package.json ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค.

"scripts": { "test": "istanbul cover node_modules/mocha/bin/_mocha --exit test/Testcases/ " } ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ๋‚˜๋Š” ์œ ์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹จ์ง€ ์›€์ง์—ฌ์•ผํ–ˆ๋‹ค-๋์—์„œ ๋‚˜๊ฐ€๊ธฐ.
์ด๊ฒƒ์€ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
์ด์Šคํƒ„๋ถˆ ์ปค๋ฒ„ ./node_modules/mocha/bin/_mocha --exit-test / .test.js์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์ผํ–ˆ์Šต๋‹ˆ๋‹ค.์ด์Šคํƒ„๋ถˆ ์ปค๋ฒ„ ./node_modules/mocha/bin/_mocha-test / .test.js --exit

exit ๋Š” Mocha๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰ํ•  ๋•Œ ์•„๋ฌด๊ฒƒ๋„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. fwiw. ํ”„๋กœ์„ธ์Šค๋Š” Mocha-the-library๊ฐ€ ์•„๋‹Œ CLI ๋ž˜ํผ์— ์˜ํ•ด ๊ฐ•์ œ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

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