common mistake
๋ผ๋ฒจ๋ก ๋ฌธ์ ๋ฅผ ์ํธ ์ฐธ์กฐํ์ฌ ๋ฌธ์ ๊ฐ ์ด๋ฏธ ์ ์ถ๋์ง ์์๋์ง ํ์ธํ์ต๋๋ค.node node_modules/.bin/mocha --version
(๋ก์ปฌ) ๋ฐ mocha --version
(๊ธ๋ก๋ฒ). ์ ์ธ๊ณ์ ์ผ๋ก ์ค์น๋ Mocha๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.๋๋ ๋ช ๋
๋์ ํน์ ํ
์คํธ ์ธํธ๋ฅผ ์คํํ์ผ๋ฉฐ ํญ์ ์ต์ ๋ชจ์นด๋ก ์
๊ทธ๋ ์ด๋ํ์ผ๋ฉฐ ๋ชจ๋ ๊ฒ์ด ์ ์์ด์์ต๋๋ค.
mocha 4๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์๊ธฐ ๋ชจ๋ ํ
์คํธ๊ฐ ํต๊ณผ๋์ง๋ง ์ถ๊ฐํ์ง ์์์ง๋ง --no-exit๊ฐ ์๋์ผ๋ก ์ถ๊ฐ ๋ ๊ฒ์ฒ๋ผ ๋๋์ง ์์ต๋๋ค.
์์๋๋ ๋์ :
๋ชจ๋ ํ
์คํธ๊ฐ ๋๋๋ฉด ํ๋ก์ธ์ค๊ฐ ์กด์ฌํ์ง ๋ชปํ๊ฒํ๋ ์๊ฐ ์ด๊ณผ ๋๋ ์์ผ์ด ์์ด๋ ํ๋ก์ธ์ค๊ฐ ์ค์ง๋์ด์ผํฉ๋๋ค.
์ค์ ํ๋ :
Mocha 4 ํ๋ก์ธ์ค๋ --no-exit ํ๋๊ทธ๋ก mocha 3์ฒ๋ผ ์์ํ ๊ธฐ๋ค๋ฆฝ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๋น๋๋ฅผ ์ฌํํฉ๋๋ค.
ํญ์ ์ฐ๋ฆฌ์ ํ
์คํธ์ ํจ๊ป. ๋๋ 700 ๊ฐ์ ํ
์คํธ๋ฅผ ๊ฐ์ง๊ณ ์์ด์ ์ด๋ ๊ฒ์ด ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ์ง ๋๋ ๊ทธ๊ฒ์ด ์ฐ๋ฆฌ ์ฝ๋๋ฒ ์ด์ค์ ์๋์ง๋ฅผ ์ ํํ ์ฐพ์ ๋ด๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค.
mocha 4.0.0์ด ์คํจํฉ๋๋ค. ๊ทธ ์ ์ ๋ชจ๋ ๊ฒ์ด ์ ์๋ํฉ๋๋ค.
๋๋ ๋๊ฐ์ ๋ฌธ์ ๋ฅผ๋ณด๊ณ ์๋ค. ํ
์คํธ๊ฐ ํต๊ณผ๋๋ฉด ๋ชจ์นด๊ฐ ์ค๋จ๋ฉ๋๋ค. ๋ด 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๊ฐ ์คํ๋ ๋ ํญ์ ์ค์ ํด์ผํ๋ ๋ชจ๋ ๊ฒ์ ๋ํ ํด๊ฒฐ์ฑ
์ผ๋ก,๋ณด๋ค ์ผ๋ฐ์ ์ธ ํ์
๋๋ค.)์ด ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ์์ธํ ์ค๋ช
: ์๋.
์ด๊ฒ์ ์ฝ์์ด ๊ตฌํ ๋ฐ / ๋๋ ํ ์คํธ์์ ์ฌ์ฉ๋๋์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด ๋ฆฌ์์ค, ์ฒญ์ทจ์ ๋๋ ์งํ์ค์ธ ์์ ์ ์ค์ ํ๊ณ ์ ๋ฆฌํ์ง ์๋ ํ ์คํธ์ ๊ดํ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค๋ฉด :
์ฐ๊ฒฐ ์ด๊ธฐ ๋ฐ ๋ซ๊ธฐ๋ฅผ ํฌํจํ๋ ์น ์์ผ์ ๊ธฐ๋ฐ์ผ๋กํ๋ 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
ํํฌ๊ฐ ์์ต๋๋ค.
https://mochajs.org/#root -level-hooks
๊ฐ์ฌํฉ๋๋ค! ๋๋ ๊ทธ๊ฒ์ ๋์ณค๋ค, ๋ฏธ์ํ๋ค : / ctrl-f์ ๋ํ ์ฉ์ด๋ฅผ ๋ชฐ๋๋ค.
wtfnode ๋ ๋๋ฅผ ์ํด ์ค์ ๋ก ์๋ํ์ง ์์์ต๋๋ค. ๋ด๊ฐ ๋ณผ ์ ์์๋ ๊ฒ์ ๋ชจ์นด๋ก ์์๋ ์ผ๋ถ PID๊ฐ ๋งค๋ฌ๋ ค ์๋ค๋ ๊ฒ๋ฟ์ด์์ต๋๋ค.
๋ฐ๋ฉด์ @boneskull ์์ง๋ https://github.com/mochajs/mocha/issues/3044#issuecomment -351299745์์ ์๋ํ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค!
wtfnode
๋ mocha
์๋๋ผ _mocha
์ ๋ํด ์คํํด์ผํฉ๋๋ค.
--exit
์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ๊ทธ๊ฒ์ ๋๋ฅผ ์ํด ๊ทธ๊ฒ์ ๊ณ ์ณค์ต๋๋ค.
package.json์ ๋ค์ ์คํฌ๋ฆฝํธ๋ฅผ ์
๋ ฅํ์ญ์์ค.
"์คํฌ๋ฆฝํธ": {
"test": "mocha --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 ๋๋ ๋ ๊ฐ์ง ์ด์ ๋ก ์๋ก์ด ๋์์ ์ข์ํฉ๋๋ค.
๊ทธ๋์ ์ ๊ฐ์ด ๋ฌธ์ ์ ๋ถ๋ชํ์ ๋, ์ด๊ฒ์ด ์ ์ฝ๋๋ฅผ ์ ๋ฆฌํ๋ ค๊ณ ์๋ํ์ฌ ์ผ์ด๋์ง ์๋๋กํ๋ ์ธ์ผํฐ๋ธ์ ๋๋ค.
์ด์ ๋ํ ๊ทํ์ ๊ด์ ์ '๋ฉ๋ชจ๋ฆฌ ๋์์ ๋ํด ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค'๋๋ '๋ด ์ ํ๋ฆฌ์ผ์ด์
์์ ์์ ํ ๊ฐ์น๊ฐ ์์ต๋๋ค'์ผ ์ ์์ต๋๋ค. ์ด ์นดํ
๊ณ ๋ฆฌ์ ์ํ๋ค๋ฉด ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ 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 ๋ํผ์ ์ํด ๊ฐ์ ์ข
๋ฃ๋ฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋น ๋ฅธ ์์ (
--exit
์ฌ์ฉ)์ ์ ๊ณตํ๋ ๊ฒ ์ธ์ ๊ฒฐํจ์ด์๋ ํ ์คํธ๋ฅผ ์ฐพ๋ ํต์ฌ ๋ฌธ์ ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋งก๊ฒผ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. ๋๋ ์ง๊ธ ๋ ์์ ์ด ์ด๋ ค์์ ๊ฒช๊ณ ์์ง๋ง ๋ฉ์ด์ ๋ฒ์ ์ ์ ๊ทธ๋ ์ด๋ ํ ๋ ๋งน๋ชฉ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ์ง ๋ง๊ณ ๋ฆด๋ฆฌ์ค ๋ ธํธ๋ฅผ ์ฝ์ผ์ญ์์ค.