common mistake
ã©ãã«ã䜿çšããŠåé¡ãçžäºåç
§ãŸããnode node_modules/.bin/mocha --version
ïŒããŒã«ã«ïŒããã³mocha --version
ïŒã°ããŒãã«ïŒã ã°ããŒãã«ã«ã€ã³ã¹ããŒã«ãããã¢ã«ã®äœ¿çšã¯é¿ããããšããå§ãããŸããç§ã¯ããæ°å¹Žç¹å®ã®ãã¹ãã»ãããå®è¡ããŠããŠãåžžã«ææ°ã®ã¢ã«ã«ã¢ããã°ã¬ãŒãããŠããŠããã¹ãŠã倧äžå€«ã§ããã
mocha 4ã§ã¯ãçªç¶ãã¹ãŠã®ãã¹ãã«åæ ŒããŸããããè¿œå ããããšã¯ãããŸãããã-no-exitãèªåçã«è¿œå ããããã®ããã«çµäºããŸããã
äºæ³ãããè¡åïŒ
ãã¹ãŠã®ãã¹ããçµäºãããšãããã»ã¹ã®ååšã劚ããã¿ã€ã ã¢ãŠããŸãã¯ãœã±ãããããå Žåã§ããããã»ã¹ã¯åæ¢ããå¿
èŠããããŸãã
å®éã®åäœïŒ
Mocha 4ããã»ã¹ã¯ã-no-exitãã©ã°ãæã€mocha3ã®ããã«æ°žé ã«åŸ
æ©ããŸã
åçŸé »åºŠïŒ
ç§ãã¡ã®ãã¹ãã§ã¯åžžã«ã ç§ã¯700ã®ãã¹ããæã£ãŠããã®ã§ãã©ããåé¡ãåŒãèµ·ãããŠããã®ãããããã¯ãããã³ãŒãããŒã¹ã«ããã®ããç¹å®ããã®ã¯é£ããã§ãã
mocha4.0.0ã¯å€±æããŸãã ãã®åã«ãã¹ãŠãããŸããããŸãã
ãŸã£ããåãåé¡ãçºçããŠããŸãã ãã¹ãã«åæ Œãããšãã¢ã«ããã³ã°ããŸãã ç§ã®TravisCIãåç
§ããŠãã ããïŒ
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
ããããšãã ã¢ã«ã®ãŠã§ããµã€ãã¯ããã®é倧ãªå€æŽã§æŽæ°ãããŠããŸããã ããã«ããCLIåŒæ°ã¯ããã«ã€ããŠèšåããŠããŸããã
è¿
éãªä¿®æ£ïŒ --exit
䜿çšïŒãæäŸãã以å€ã«ãæ¬ é¥ã®ãããã¹ããèŠã€ãããšããäž»èŠãªåé¡ããŠãŒã¶ãŒã«ä»»ããããšã«åæããŸãã ä»ã¯èªåã§èŠåŽããŠããŸãããã¡ãžã£ãŒããŒãžã§ã³ãã¢ããã°ã¬ãŒããããšãã¯ããã¿ããã«ã¢ããã°ã¬ãŒãããã®ã§ã¯ãªãããªãªãŒã¹ããŒããå¿
ãèªãã§ãã ããã
ãªãªãŒã¹ããŒãã§ã¯ã httpsïŒ//github.com/mafintosh/why-is-node-running/issues/7ãåå ã§æ©èœããªãå Žåãé€ããŠã why-is-node-running
䜿çšãæšå¥šããŠã
ããããããã ããã©ã«ããžã®å€æŽã®èåŸã«ããwhy-is-node-running
ãæŸæ£ãããŠå£ããŠããããšãèãããšãããã¯æããŠãŒã¶ãŒãã¬ã³ããªãŒãªå€æŽã§ã¯ãªãå¯èœæ§ããããŸãã
ããã«ã¡ã¯ãã¿ããªã
ãŸãããã®ç¹ã§å€§ãŸããªã¢ããã°ã¬ãŒããã¹ã«ã€ããŠãè©«ã³ããããšæããŸããMochaããã¹ãã®å®è¡ãç¶æããŠãããã®ããŠãŒã¶ãŒã«éç¥ããå¿
èŠãããããšã«ééããªãåæããŸãïŒããããã°ãããã»ã¹ãéãããŸãŸã«ããå¿
èŠãããããŸãããããããå®äºããåŸã«å€±æãè¿ãçç±ã§ãïŒãããŸã å®å
šã«æºè¶³ã®ããæ¹æ³ãèŠã€ããŠããŸããã ããŒãžã§ã³4ã¯ãPhantomJS 1.xã®ã€ã³ã¹ããŒã©ãŒã®å€æŽãåå ã§CIã倱æããããã«ããã³ãââãã衚瀺ããããããå¿
èŠãªæéãååŸã§ããŸããã§ããïŒpackage-lock.jsonãããã°ããããããããé²ãããšãã§ããã§ãããïŒäºåã«èšå®ããŸããããããã§ãåäœãããããšãã§ããŸããïŒã why-is-node-running
ã¯ãç§ãã¡ã圹ç«ã€ãšããã£ã1ã€ã®ããŒã«--expose-internals
ã®èŠä»¶ãšãããã°ã©ã ã§åºåãååŸããããã®é©åãªæ¹æ³ã®æ¬ åŠã®éïŒã ããã€ãã®æé ãå®è¡ãããšãæ©èœããããšãããããŸããã
--expose-internals
ïŒ node --expose-internals node_modules/mocha/bin/_mocha
ïŒã§Mochaãå®è¡ããmocha.opts
ãªã¹ããããŠããïŒã«after(require('why-is-node-running'))
å«ããïŒãŸãã¯å°ãªããšãæåã«ïŒããã«ããŸã...äœããªãããã¯ãŸãã§ããïŒãªãªãŒã¹ããŒããæŽæ°ããŠããããã詳现ã«èª¬æã§ãããã©ããã¯ããããŸããïŒãããè¯ããªãã·ã§ã³ãç¥ã£ãŠãã人ãã
ãŸãããµã€ãã®ããã¥ã¡ã³ããäžè¶³ããŠããããšããè©«ã³ããŸããã§ããã ãæ©ãæŽæ°ããŸãã ïŒïŒ2987ãå®äºãããšãããŒãžã§ã³/å ¬éã¹ã¯ãªããã®èªåéšåã«ããããšãã§ããŸãïŒïŒ
@ScottFreeCode
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_modules/.bin/mocha
代ããã«node --expose-internals ./node_modules/mocha/bin/_mocha
å®è¡ããããšã§äœ¿çšã§ããããŒããªãã·ã§ã³ã§ãã Mochaãç¹å®ã®ãã©ã°ãããŒãã«æž¡ãããããã®ãã©ã°ã«--expose-internals
ãè¿œå ã§ããããããããä¿®æ£ã§ããŸãã
ããã¥ã¡ã³ããšMochaã®ããŒããã©ã°ã®æŽæ°ããããã远跡ããããã«ãmochajs / mochajs.github.ioïŒ81ãšïŒ3045ãäœæããŸããã å°ãªããšãããã¥ã¡ã³ããæŽæ°ããããŸã§ããã®åé¡ã¯éãããŸãŸã«ãªããŸãã
@ScottFreeCodeã¯ã --expose-internals
ãããŒã<= 6ã§ã®ã¿æ©èœããããšãäŒããããšæããããããŸãããããŸãããã°ã人ã
ã¯äžæçã«ããŒã6ã«ããŠã³ã°ã¬ãŒãããŠããã£ã³ã»ã«ãŸãã¯åç
§è§£é€ããå¿
èŠã®ããã¿ã€ããŒããŸãã¯å¿
èŠãªãœã±ãããèŠã€ããããšãã§ããŸãã unref'ed ã ãŸãã人æãããã«ãããããããafter
ãšafterEach
ããã¯ãã¯ãªãŒã³ã¢ãããè¡ãããšã
ïŒãã¹ãŠã®ãã¹ããå®äºãããšãã«mochaãåŒã³åºãã°ããŒãã«ãªãåŸãããã¯ã¯ãããŸããïŒïŒ
ãšã«ãããç§ã¯å©ãã«æè¬ããã¢ã«ã«æè¬ããŸãïŒ
--expose-internalsã¯ããŒã<= 6ã§ã®ã¿æ©èœããããšã«æ³šæããŠãã ããã
æ¬æ°ã§ããïŒ Node8.6.0ã§ãã¹ãããŸããã ãã¹ãŠã®OSã«ããããã§ã¯ãããŸããããæã£ãŠãããã¹ãŠã®ããã¯ã¹ãèµ·åããŠãããªãã«ãã§ãã¯ããå¿ èŠããããšæããŸã...
ããã¯ãåœé¢ã®éåé¿ããããã®
æ¬æ°ã§ããïŒ Node8.6.0ã§ãã¹ãããŸããã ãã¹ãŠã®OSã«ããããã§ã¯ãããŸããããæã£ãŠãããã¹ãŠã®ããã¯ã¹ãèµ·åããŠãããªãã«ãã§ãã¯ããå¿ èŠããããšæããŸã...
ããã¯ãã¢ãžã¥ãŒã«ããã®åºåãããªã¬ãŒãããšããç¹ã§ãæ©èœãããŸãããNode.jsã®ããŒãžã§ã³ã«é¢ä¿ãªããå®éã«ã¯å€ãã®æ å ±ãæäŸããŸããã
ãµã€ãã«ããã€ãã®æŽæ°ãè¿œå ããŸãããïŒ3045ã«é¢ããä»åŸã®ã³ã¡ã³ããåç §ããŠãã ããã
ããã¯ãã¢ãžã¥ãŒã«ããã®åºåãããªã¬ãŒãããšããç¹ã§ãæ©èœãããŸãããNode.jsã®ããŒãžã§ã³ã«é¢ä¿ãªããå®éã«ã¯å€ãã®æ å ±ãæäŸããŸããã
setTimeout
ãšsetImmediate
䟿å©ãªã¹ã¿ãã¯ãã¬ãŒã¹ãæäŸããŸããããªã¹ãã³ã°ãµãŒããŒãªã©ã®ä»ã®ãã®ã«ã€ããŠã¯å®éã®æ
å ±ã¯ãŸã£ãããããŸããïŒæè¿ããµãŒããŒãã©ã®ããã«æ©èœããŠããããç解ããããšãããšãã«ããããŸãããã£ãŠããŸãïŒã èŠæšã®ãasync-dumpãã®äŸã¯ãæ°ããããŒãžã§ã³ã®Nodeã§ã®ã¿äœ¿çšå¯èœã§ããããã¹ãŠã«å¯ŸããŠæ©èœããïŒ --expose-internals
å¿
èŠãšããªãïŒãšããç¹ã§çã®å©ç¹ããããŸãã
ç§ã®äžè¬çãªã¢ããã€ã¹ã¯ãã髪ãæãå Žåã¯ã --exit
ãè¿œå ããŠãªã©ãã¯ã¹ããããšãããã®ã ãšæããŸãã 次ã«ã次ã®ãããžã§ã¯ãã«ã¯äœ¿çšããªãã§ãã ããïŒwinkïŒ
...ãããŠããã«ããã¥ã¡ã³ãããã
ã¯ããŒãºãPRã«ã€ããŠå床ã³ã¡ã³ãããŠç³ãèš³ãããŸããããããã«ãŠãŒã¶ãŒãã¬ã³ããªãŒãªè§£æ±ºçããããããããŸããïŒ
ã©ã³ããŒã3ç§ã»ã©çµäºããåŸãå€æŽãããåäœã«é¢ããèŠåããã°ã«èšé²ã§ããŸãããããã»ã¹ã¯çµäºããŸããã§ããã
ã©ã³ããŒãçµäºããåŸã«setTimeout()
ãè¿œå ãã timeout.unrefïŒïŒãåŒã³åºããŠããã®ã¿ã€ã ã¢ãŠãã«ãã£ãŠããã»ã¹ã®çµäºã劚ããããªãããã«ããå¿
èŠããããŸãã ã¿ã€ã ã¢ãŠããå®è¡ãããå Žåã¯ãèŠåã®æéã§ãð
ç§ã¯ãããèæ ®ããŸãããããããã¬ããŒã¿ãŒãä»ã®çµ±åã§ä»ã®åé¡ãåŒãèµ·ããã®ã§ã¯ãªãããšå¿é ããŠããŸã...ç§ã¯ãããèµ·ãããªãããšã蚌æããããšã¯ã§ããŸããã
ããã§ãåé¡ãçºçãã why-is-node-running
ãæ£ããæ©èœããªãå Žåã¯ã wtfnodeã確èªããŠ
ãã®ããã±ãŒãžã¯ç§ã«ãšã£ãŠã¯ããã«ããŸãæ©èœããŸããã
æ¢åã®ãã¹ããçªç¶çµäºããªããªããšãïŒæ§ããã«èšã£ãŠãïŒæžæãããšããããŸãã ãªãªãŒã¹ããŒãã«æ°ããåäœã«ã€ããŠã®èšåããã
ç§ã¯ãafterïŒïŒé¢æ°ã§redis.quitïŒïŒãåŒã³åºãããšã匷å¶ããæ°ãããã¹ãã§å¶ç¶ã«å€æŽãçºèŠããŸãããç§ã¯ãæ£ãããŠé©åãšæãããæ°ããåäœã«ééããªãæºè¶³ããŠããŸãã
ä»åã¯[ãã®èŠç¹]ã䜿çšããå¿ èŠã¯ãããŸããã§ãããã @ boneskullã§ãã§ã«è¿°ã¹ãããã«ãã©ã®éåæã¿ã¹ã¯ãå®äºããŠããããããã»ã¹ã®çµäºã
ãã®æ°ããåäœã®å€æŽã®èåŸã«ããåç §ãã±ããã®åé¡ãå®å šã«ã¯ç解ããŠããªãããšãèªããªããã°ãªããŸããã
AFAICTãããã¯æªåŠçã®PromiseæåŠãšé¢ä¿ããããŸãã ããããããããªãããã¢ã«ã®ãã¹ãã«äžããããçŽæã解決ããªããšãã¢ã«ã¯æåããããã®ãã¹ãããç¶è¡ããŸããïŒ --bail
ãèšå®ãããŠããå ŽåïŒã ãããã£ãŠãæåŠãã³ãã©ãŒãæããªããå®è£
ãäžååãªãã¹ããããPromiseã§ããå¿
èŠããããŸãããå«ãŸããŠããã³ãŒãã¯ãšã«ãã解決ãããŠããå¿
èŠããããŸãã
ãã®å Žåããããã®åé¡ãæ€åºããã®ãã¢ã«ã®ä»äºã§ãããã©ããã¯ããããŸããã ãŸãããããã®åé¡ãæ€åºããããã«äœããã®éæ³ãå®è£
ãããšãçŸåšã®ïŒæ£ããèšè¿°ãããïŒãã¹ããç¡æéã«ãã³ã°ããå¯èœæ§ãããå Žåããã®éæ³ã¯ãªããã¢ãŠãã§ã¯ãªããªããã€ã³ã®åäœã§ããå¿
èŠããããŸããã€ãŸãã --no-exit
ã§ã¯ãªã--exit
ã
å
¬åŒã®node-mongodb-nativeãã©ã€ããŒã䜿çšããŠãã¹ãŠã®ãã¹ãã調ã¹ãŠã.close()
ã§ãã¹ãŠãéããªããããèšèšäžã®ããã§ãã ç§ã®ãã¹ãã¯æ£ããåäœããŠããŸãããäŸåé¢ä¿ã¯æ£ããåäœããŠããŸããïŒãŸãã¯ãããã§ã¯ãããŸãããïŒã¹ã¯ãªãããä»ã®å Žæã§çµäºãããŸã§ããœã±ãããŸãã¯ãã¡ã€ã«èšè¿°åãé·åŒãã®ã¯æªãåäœã§ãããšããäºå®ãå¿
ãããç¥ããŸããâããã§ããïŒïŒã ããã§ãç§ã¯ããã§äœããã¹ãããŠããŸããïŒ ç§ã®ã³ãŒãããŸãã¯ä»ã®èª°ãã®ã³ãŒãïŒ ç§ã¯èªåã§ãã¹ãããŠãããšæã£ãŠããŸããããæããã«ããã§ã¯ãããŸããã§ããã
確ãã«ã --exit
ãã©ã°ãè¿œå ããããšã¯ã§ããŸããã次ã®äººã¯è¿œå ã§ããªãå¯èœæ§ããããŸãããããã«ããŠããå®å
šã«çŽ°ããã³ãŒãããã¹ãããŠå®å
šã«çŽ°ãããã¹ããèšè¿°ã§ããããã§ãã©ã³ãã ãªäŸåé¢ä¿ã®åå ãããã®ã¯ééã£ãŠããããã§ããç§ã®ãã¹ãã¯ç¡æéã«ãã³ã°ããŸãã
æåŸã®after()
ããã¯ã«process.exit()
ãè¿œå ãããšããã¹ãã¯ãã³ã°ããŸãããã --watch
ïŒããããä»ã®æ©èœïŒã ãã§ãªããã²ã©ãå£ããŸããå€æŽãç£èŠã§ããªããªããŸãããã«ãŒãœã«ã®ãªãã·ã§ã«ã«æåºãããŸãã
ç§ãããã§ç¡ç¥ãªäººã§ããå¯èœæ§ãéåžžã«é«ãã§ãïŒç¢ºãã«ç§ãåŸãŠããªãããšããããããããå€ãã®äººã ãé¢ãã£ãŠããã®ã§ãç§ã¯ããæãåŸåããããŸã:)ïŒãç§ã¯ã¡ããã©ãã®å šäœã®ããã«æããŸãç©äºã¯å®å šã§ã¯ãããŸãã...ããã§ã...ïŒ
也æ¯:)
ç·šéïŒãã®åäœãèãããšãMochaãã¹ãå
ã§--watch
ã§å®è¡ãããŠãããã©ããã確èªããŠã process.exit()
ãåŒã³åºããªãããã«ããåé¡ã解決ããæ¹æ³ã¯ãããŸããïŒ
@DanielSmedegaardBuus TL; DR on the solutionïŒ --exit
ãmocha.opts
ãã¡ã€ã«ã«å
¥ããŸãã ïŒããã¯éåžžãããäžè¬çãªãã³ããšããŠãMochaã®å®è¡æã«åžžã«èšå®ããå¿
èŠããããã¹ãŠã®ãœãªã¥ãŒã·ã§ã³ã§ããïŒãã®å€æŽã®è©³çŽ°ã«ã€ããŠã¯ã以äžãåç
§ããŠãã ããã
ããã¯ãPromiseãå®è£ ããã¹ãã§äœ¿çšãããŠãããã©ããã«é¢ä¿ãªãããªãœãŒã¹ããªã¹ããŒããŸãã¯é²è¡äžã®äœæ¥ãã»ããã¢ããããã¯ãªãŒã³ã¢ããããªããã¹ãã«é¢ãããã®ã§ãã äŸãã°ïŒ
æ¥ç¶ã®éå§ãšçµäºãå«ããWebSocketã«åºã¥ãAPIã®ãã¹ãããããŸãã ãã®APIã¯ãã°ããããæ¥ç¶ãæ£ããéããŠããŸããã§ããããåºç€ãšãªãæ¥ç¶ãæ£ããåŠçãããããšããã¹ãã«æèšããæ¹æ³ãå®éã«ã¯ãªãã£ãããããã¹ãã«åæ ŒããŸããã ïŒèªåã®ã³ãŒãã®ã¿ãå³å¯ã«ãã¹ãããå Žåã誀ã£ãŠæ£ããæ¹æ³ã§ãããšèª€ã£ãŠèããæ¹æ³ã§äŸåé¢ä¿ã䜿çšããŠããããšã確èªã§ããŸããããã ããæåã«äœ¿çšæ³ã®æ£ç¢ºæ§ã«é¢ããåé¡ããã£ããããããã«ãå®éã®WebSocketã§æ£ç¢ºã«ãã¹ãããŠããŸãã-åäœãã¹ããè£å®ããçµ±åãã¹ããïŒ --no-exit
åäœïŒMocha3ã®;çŸåšã¯Mocha4ã®ããã©ã«ãïŒã«åãæ¿ãããšãã«ãã®ãšã©ãŒããã£ãããããããã®ãã¹ããå®è¡ãããšããŒããéããªãããšãçºèŠããŸããã WebSocketæ¥ç¶ã¯ãŸã ãªãã¹ã³ããŠããŸãã
ïŒãšã©ãŒãç¬èªã®ã³ãŒãã§ã¯ãªãäŸåé¢ä¿ã«ããå¯èœæ§ãããã®ã¯äºå®ã§ãããããã§ãããã®äŸåé¢ä¿ã®ç¹å®ã®ããŒãžã§ã³ãåºè·ããåã«ãäžèšã§ç€ºåããããã«ãããã¯ããããåäœãã¹ããããçµ±åãã¹ãã«é©ããŠããŸãããçæ³çã«ã¯ãããžã§ã¯ãã«äž¡æ¹ãå«ãŸããŠããŸããïŒ
ãã¡ãããããã¯å¿
ãããå¿
èŠã§ã¯ãããŸãããå Žåã«ãã£ãŠã¯ããã®æ§è³ªã®ãªãœãŒã¹ã¯ãããã»ã¹ã匷å¶çµäºããããŸã§åç¶ããããšãæå³ããå ŽåãããªãœãŒã¹ã®ä»ã®ã¯ãªãŒã³ã¢ãããå®éã«ã¯éèŠã§ãªããŠãããŒããåç¶ãããå ŽåããããŸããåã
ã®ã¡ã³ããŒãåå©çšãããªãœãŒã¹ããŒã«ã®äžéšã§ããå¯èœæ§ããããããŒã«å
šäœãã¯ãªãŒã³ã¢ããããå¿
èŠã¯ãããŸããããã®ãããªå Žåã --exit
ãæ£ããã§ãããã ããã©ã«ãã®åäœãå€æŽãããçç±ã¯ããã®ãããªåé¡ã®å¯èŠæ§ãé«ããããã§ããã以åã¯ã --no-exit
ãè©ŠããŠãããã®çš®é¡ã®ãšã©ãŒããã§ãã¯ããããšãç¥ããªãã£ãã§ãããããããã©ã«ãã§ãããã«ééããŸãåäœãæ£ããïŒãŸãã¯å°ãªããšãå¿é
ãã䟡å€ããªããšå€æããå ŽåïŒå Žåã¯--exit
ãŸãã
ãã¡ããããããçºçãããšãã«ã¶ãäžãã£ãŠããããããŸãã ãµããŒããããŠãããã¹ãŠã®ããŒãžã§ã³ã®Nodeã§æ©èœãããŸã å®è¡ãããŠããå¯èœæ§ã®ãããã®ã«å¹²æžããããšãªããå®è¡äžã®ãã®ãå®éã«ããã°ã©ã ã§ãã§ãã¯ããæ¹æ³ãçµ±åã§ãããã©ããããŸã ç解ããå¿ èŠããããŸãïŒé©åãªèŠåãŸãã¯ãšã©ãŒã衚瀺ã§ããŸãïŒãã¢ã«ãçµããã«éãããšãã«ã¯ãªãŒã³ã¢ãããŸãã¯ã¯ããŒãºããŸãã
ç³ãèš³ãããŸããããããã¯éåžžã«èç«ãããããšã§ããã ã¢ã«ãåºãªãçç±ã調ã¹ãããšããŠãããšããã§ãã https://boneskull.com/mocha-v4-nears-release/#mochawontforceexitã¯why-is-node-running
ã«ãªã³ã¯ããŠããã®ã§ãè¡ã£ãŠãã®ã¢ãžã¥ãŒã«ã䜿ãããšãããšãããšã©ãŒïŒã¢ãžã¥ãŒã«ãèŠã€ãããŸããããšããäžå¯è§£ãªã¡ãã»ãŒãžã衚瀺ãããŸãã internal / linkedlist '...ïŒã¹ã¿ãã¯ãã¬ãŒã¹ïŒãããããŠ--expose-internalsãæ©èœããªãçç±ãèŠã€ããããšããŠãŠãµã®ã®ç©Žããã©ã£ãåŸãç§ã¯https://github.com/mochajs/mocha/ã«è¡ãçããŸããissues / 3045ã衚瀺ãããŸããã why-is-node-running
ã¯ãéãããŸãŸã®æ¢ç¥ã®ãã³ãã«ã1ã€ãšãäžæãªãã³ãã«ãããã€ãããããšã瀺ããŠããŸãããäœããªã¹ããããŠããŸããã
ããã¯ãããæèµ·ããã®ã«é©åãªå Žæã§ã¯ãªããããããŸããããã¢ã«ã®ããã¥ã¡ã³ãã¯ãä»äºã«åãæããããã«ããã»ã©å€ãã®ã°ãŒã°ã«ãšåé¡ãã€ãã³ã°ãå¿ èŠãšãã解決çãæšå¥šããã¹ãã§ã¯ãããŸããã ç§ã¯ç©äºãåãåºããŠè¿œå ããããšããŠããŸããããåäœã¯éåžžã«äžè²«ããŠããŸããã§ããã å°æ¥ã®ãŠãŒã¶ãŒãšç§ã®æ£æ°ã®ããã«ïŒ
package.jsonïŒ
"scripts": {
"test": "mocha --exit"
}
ãããç§ã«ã§ããæåã®ããšã§ãã
@jeffvandykeç§ã¯ããªãã®æ¬²æ±äžæºãç解ããåãåé¡ãçµéšããŸãã-ããããçŽæã®èåŸã«ãã䞻匵ãããå Žåã¯ããã®å€æŽã«æè¬ãããããããŸããã
éåæåäœãäžå®å®ãªä»æ§ãããã€ããããŸããã ä»æ§ã®å®è¡é åºã«ãã£ãŠã¯ããã£ãããããªãã£ããããã¹æåŠãšã©ãŒãã³ã³ãœãŒã«ã«èšé²ãããåæ Œããä»ã®äœçŸãã®ãã¹ãã«ãã£ãŠèŠããªããªãããæåŠãçºçããåã«ããŒãã€ã³ã¹ã¿ã³ã¹ãã·ã£ããããŠã³ããŸãã
é€å»ããåŸã --exit
ç§ããmocha.opts
ãæåŠãããçŽæã確å®ã«ãšã©ãŒãèšé²ãããããã®ãã°ã匷調衚瀺ããŸãã
ç§ã¯ç¥ã£ãŠããŸããå€ãã®å
±éã®çã¿:)ã¢ã«ã®ææžåãããåäœã¯å®éã«ã¯ç§ã«ã¯æ£ããããã«èãããŸãããç§ã®5ã€ã®ãã¹ãã¯ååã«åçŽã«èŠããŸãããããŒããã§ããã䜿çšããŠAPIããã¹ãããã ãã§ãããã¢ã«ãçµäºããªãçç±ã¯ãŸã ããããŸããããããã¯ãã¹ãŠæ£åžžã«åæ ŒããŸããïŒã¯ãã倱æããå¯èœæ§ããããŸãïŒã why-is-node-running
ãæ©èœããªãçç±ãç解ããããã«ãã£ãšæéãè²»ããããšãã§ããŸããããä»ã®äººã®ã³ãŒãã«ã€ããŠããããããŠããã®ã§ããšããããäŒæ©ããã€ããã§ãã
ç§ã¯ããããããã§éãã§ããã§ãããããããŠç§ãåçŸå¯èœãªäœããåŸãããšãã§ããã°ãç§ã¯æ°ããåé¡ãéããããããŸããããããçŽæã¯ãããŸããã
æ°ããããŒãã€ã³ã¹ãã¯ã¿ãŒã®ãããã¬ãŒããå§ãããŸã...ããã¯è¯ãéåæãã¬ãŒã¹ãæã£ãŠããŸãã
ããŒãïŒ wtfnodeã¯ãããã«å
ãåœãŠãã®ã«ã¯ããã«åªããŠããããšãresult.text()
ãŸãã¯.json()
ãåŒã³åºãå¿
èŠãããããšãããããŸãããããããªããšãæ¥ç¶ãéãããŸãŸã«ãªããŸãã wtfnode ./node_modules/.bin/_mocha
ãå®è¡ãã Ctrl-CãæŒããšãéããŠããæ¥ç¶ã衚瀺ãããŸããã
ããã¥ã¡ã³ããwhy-is-node-running
ããããã®ããã±ãŒãžãæšå¥šããŠããã°ãã£ãšç°¡åã ã£ããšæããŸãã
å¥ã®ææ¡ïŒã¢ã«ãçµäºããªãå Žåã«äœããã®èŠåãåºããšããã§ãã ã¢ã«ãwtfnode
䜿çšããŠããã°ããçµéããåŸãããŒããåç¶ãããŠããã¢ã¯ãã£ããªãã³ãã«ãäžèŠ§è¡šç€ºã§ããã°äŸ¿å©ã§ãã
æ£ããããšãäœã§ãããã¢ã«ãåºãªãçç±ãç解ããããã«ãããŸã§èŠãªããã°ãªããªãã£ãã®ã¯ãŽãã ãšæããŸãã ãšã«ãããç§ã¯ç§ã®ææ¡ãããŸãã:)
ããã«ã¡ã¯ãã¿ããªã
ç§ã¯ãããã¯ç§ãèããå¯èœæ§ããããã¢ã«ã¯ãŸã èªåèªèº«ã§çµäºããã«ã¯å€±æããæãåºæ¬çãªãã¹ãã§ã¯ããã®æ©èœã¯ãŸã æ£åžžã«åäœããŠããªããããããªããšæããŸãã --no-exit
ã¯åªããããã©ã«ãã®ãªãã·ã§ã³ã§ãããç§ã¯ããã§ãã¹ãŠã§ãããç§ãééã£ãŠããããšãç解ã§ããŠããªãããmochaã«æ¬è³ªçã«äœããééã£ãŠãããæãåçŽãªãã¹ãã§ããéããããšãã§ããŸããã
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()
})
ãããsomenoeã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
ç§ã¯ãã¹ãŠã®ãã¹ãã®åã«ã¢ã«ã®ããŒãã¹ãã©ãããè¡ã£ãŠããŸãã åºæ¬çã«ãåãããã»ã¹ã§å°ããªHTTPãµãŒããŒãèµ·åããŸãã
ã¢ã«ã®å®è¡ãåæ¢ããåŸãããã¯ããŠã·ã£ããããŠã³ã§ããã€ãã³ãã¯ãããŸããïŒ ã·ã£ããããŠã³ãããã®ã§ããããã®æã ãã§ãã
ãã®æ©èœã®èåŸã«ããã¢ã€ãã¢ã倧奜ãã§ããã¶ãäžãã£ãŠããã€ãã³ãããããã©ããã確èªããããã®è¯ããã¹ãã§ãã
@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ããã©ããŒãã
ããããããã¬ãŒã®ç®çã§ããIMOã ã¹ã¯ãªãããçµäºããªãã£ãå Žåãã©ã®ããã«ãããã°ããŸããïŒ
https://github.com/GoogleChromeLabs/ndbã¯ã¯ãŒã«ãªãããžã§ã¯ãã§ãã
ãªããããã¯ïŒç§ã¯ãã®ãã±ããã倧奜ãã§ãããããæäŸãç¶ãããã©ãã«ã·ã¥ãŒãã£ã³ã°ããŒã«ã«é¢ããæ å ±ã®ããã ãã§ãïŒ :)
@borisovgå®éã«è§£æ±ºçãæäŸããå Žåããã®ãã±ãããã©ãã»ã©çŽ æŽããããæ³åããŠã¿ãŠãã ããã :)
@boneskullç§ã
@mjgsããã¯ç§ã®ããã«è¡ããŸãã- wtfnode
ã¯æ©èœããŸãããã _mocha
ãã€ããªã§ã¯ãªãã 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ãmongodbæ¥ç¶ãéããŠããããšã瀺ããŠããå Žåãããã¯éããŠããŸãã ãªãããªãã¯ãããééã£ãŠãããšæããŸããïŒ
@evertããªãã¯ç§ãæžãããã®ã誀解ãããããããªããšæã
æå°éã®äŸã¯èª¬æã«æé©ã§ãããå®éã«ã¯ã衚瀺ãããŠãããã®ãšåæ§ã®åºåã確èªããã®ã«åœ¹ç«ã¡ãŸãããé·å¹Žã«ããã£ãŠäœæãããå®éã®ã³ãŒãã§ã¯ããããã®æ¥ç¶ãèŠã€ããã®ã¯ããã»ã©ç°¡åã§ã¯ãããŸããã ãŸã éããŠããmongoæ¥ç¶ãããããšãç¥ã£ãŠããã®ã¯è¯ãããšã§ãããå®éã«ããããèŠã€ããããšã¯ç°¡åã§ã¯ãããŸããã ç§ã¯æçµçã«ããã€ãã®éããŠããæ¥ç¶ãèŠã€ããŸãããããããã¯ãã¹ãŠã®æ¥ç¶ãæ€èšŒå¯èœã«éããããè¡šé¢ã¬ãã«ãããã³ãŒãå ã§ã¯ããã«æ·±ããwtfnodeã¯ãã³ã°ãŒã¹ã¢ãžã¥ãŒã«ãã¹ããªã¹ãããããšã«ãã£ãŠããããååšããã ãã®å Žæãç¹å®ããã®ã«åœ¹ç«ã¡ãŸããã§ããã ããŒãçªå·ã ãã«åºã¥ããŠè¿œè·¡ãããã®ããŸã ããã€ããããŸãããæåŸ ããŠããŸãã
Firebaseãšéä¿¡ãããµãŒããŒã¬ã¹é¢æ°ãäœæãããšãã«ãã®åé¡ãçºçããŸããã 管çSDKããªãŒãã³ãã³ãã«ãç¡æéã«ç¶æããŠããããšãå€æããŸããã ãã®å€æŽïŒããã³ãã®åŸã®wtfnode
䜿çšã®ææ¡ïŒã«ãããç§ã¯ãã®äºå®ãç¹å®ããå°æ¥ã®é çïŒããã³ã³ã¹ãïŒã倧å¹
ã«ç¯çŽããããšãã§ããŸããã
ç§ã®æèŠã§ã¯ãããçš®ã®ãXãé·ããã³ã°ããåºåããªãå Žåã¯ãããã¹ããstdoutã«ã¹ããŒãããããžãã¯ãå«ãããšéåžžã«åœ¹ç«ã¡ãŸãã ãããã©ãã»ã©å®çŸå¯èœãããŸãã¯ãã®ãããªæ¹åãçã¿åºãããã«ã©ãã ãã®åž¯åå¹ ãå©çšã§ãããã¯ããããŸããããããã¯ãwtfãç§ã®ã¢ã«ã§èµ·ãã£ãŠããããšããæåã®æ¬²æ±äžæºãåãããã®ã«åœ¹ç«ã€ãããããªããšæããŸãã
var timers = sinon.useFakeTimers({
now: new Date().getTime(),
shouldAdvanceTime: true,
});
timers.restore();
ãå¿ãããšãããã»ã¹ã¯æ°žä¹
ã«ãã³ã°ããŸãã
ããã«éä¿¡ããã@pgiladã®ããã¥ã¡ã³ãã«åºã¥ããŠãç§ã«ã¯ããã¯ãªãŒã³ãªãœãªã¥ãŒã·ã§ã³ããããŸãã ããã¥ã¡ã³ããèšãããã«ïŒ
誀æ€ç¥ãåé¿ããããè¯ããã¹ããã©ã¯ãã£ã¹ãä¿é²ããããã«ãMochaã¯ãå®è¡ãå®è¡ããå¿ èŠããããšå€æãããšãã«ãprocess.exitïŒïŒãä»ããŠèªåçã«èªæ®ºããããšã¯ãªããªããŸããã
ããã¯ãªãŒã³ãªè§£æ±ºçã¯ãã°ããŒãã«after
é¢æ°ïŒ describe
é¢æ°ã®å€åŽã«ããafter
ïŒãäœæããããšã§ãã 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 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ç§ã¯2ã€ã®çç±ã§æ°ããåäœã奜ãã§ãïŒ
ãããã£ãŠãããã«ééãããšããããã¯ãã³ãŒããã¯ãªãŒã³ã¢ããããŠããããèµ·ãããªãããã«ããããã®ã€ã³ã»ã³ãã£ãã§ãã
ããã«ã€ããŠã®ããªãã®èŠæ¹ã¯ããç§ã¯ã¡ã¢ãªãªãŒã¯ãæ°ã«ããªããããŸãã¯ãããã¯ç§ã®ã¢ããªã±ãŒã·ã§ã³ã§ä¿®æ£ãã䟡å€ããªãããããããŸããã ããªãããã®ã«ããŽãªã«ããŠããå Žåã¯æãç°¡åã«äœãããšã§ãmocha.opts
ããã³è¿œå --exit
ã
ããã¯ä¿¡å·ã§ã¯ãªããããå€ãã®ãã€ãºãçºçãããããšã§ããããã«ç§ã«ã¯æããŸããã»ãšãã©ã®å Žåãã¢ã«ãæåŸã«ãã³ã°ããããã誰ã®ã¢ããªãè¯ããªãããšã¯ãããŸããã
Mochaãããã©ã«ãã«ãªãå Žåã¯ããã¹ãïŒããã³ãã¹ãŠã®after
/ afterEach
åŒã³åºãïŒãçµäºãããšãã«ããã©ã«ãã§çµäºããå¿
èŠãããããã§ãã ã人工ãã¹ãç°å¢ã¯äººå·¥çã ããšäººã
ã«äŒããããã ãã«ããããªãããšã¯ã倧å€æ°ã®ãŠãŒã¶ãŒïŒãŸãã¯ãŸãšããªå°æ°æŽŸïŒã«å©çããããããŸããã
人ã ã¯æ¬åœã«éããŠããªãæ¥ç¶ããããã°ãããå Žåã¯ãããã¯ããªããã®ããã®ãªãã·ã§ã³ãæäŸããå Žåã§ãªããã°ãªããŸããããã§ãã ãããããã以å€ã®æéã¯ãã©ã€ãã©ãªã®ãŠãŒã¶ãŒãä»ã®ãã¹ãŠã®äººãããã¹ãç°å¢ã«ããŠã10åãã®å¯èœæ§ã®ãããã®ã®1ã€ãéããŠããããšæ··ä¹±ãããããšã¯æ¬åœã«æçã§ããïŒ
å¥ã®èšãæ¹ãããã°ãããã«ééãã人ã®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_ãæäŸããŸãïŒïŒ
ã€ãŸããããªãã
PSç§ã¯ã¡ããã©ããã«åºããããŸããïŒ https ïŒ éãã¹ãã³ãŒãïŒãã®ãæ©èœãã«ãããã¢ããªã§knex.destroy()
ãåŒã³åºãå¿
èŠããããšèª€ã£ãŠèããããŸããïŒã
èŠçŽããŒãžã§ã³ïŒ
ãã€ã¹ããŒãœã³ïŒéåžžãæ瀺çã«knex.destroyïŒïŒãåŒã³åºãå¿ èŠã¯ãããŸãããããã¯ãããã¥ã¡ã³ãèªäœãïŒç§ã®åŒ·èª¿ïŒãšèšã£ãŠããããšã«ãã£ãŠæ瀺ãããŠããŸãã
ãã€ã¹ããŒãœã³ïŒåŒçšããã¥ã¡ã³ã
æ··ä¹±ããŠãã人ïŒknex.destroyïŒïŒãåŒã³åºããªããšãã¹ã¯ãªããããã³ã°ããŸãã ã§ã¯ãknex.destroyïŒïŒãæ瀺çã«åŒã³åºãå¿ èŠããªããšããã®ã¯ã©ãããæå³ã§ãã
ãã€ã¹ããŒãœã³ïŒãããããã¯ã¢ã«ã®ããã ãšä»ã®å Žæã§ã ãèšã£ãã éåžžã®ãµãŒããŒã®äœ¿çšã§ã¯ãæ¥ç¶ããŒã«ãç Žæ£ããå¿ èŠã¯ãããŸãããMochaã®å Žåã¯ãã°ããŒãã«ãªç Žæ£ããã¯ã調ã¹ãããšããå§ãããŸããfuturestud.io/ tutorials /âŠãåç §ããŠãã ããã
ããããæ確ã«ããããã«ããã®ãŠãŒã¶ãŒã«ã¯äœæ¥ç°å¢ããããã¢ã«ã¯ïŒæ¬è³ªçã«ïŒå®å šã«è¯ãã³ãŒããééã£ãŠãããšèšã£ããããæ¥ç¶ãç Žå£ããããšã«ãã£ãŠäœæãããã°ã解決ããããšããæéã誰ãç¥ã£ãŠãããã倱ããŸããã ãããŠãããã¯å ¬å ±ã®å Žã§ãããè¡ãããã«èµ·ãã£ãããšç§ã¯èŠãããšãèµ·ãã£ã人ã ãã§ããã®1äžéãªäººã§ãã
ã ãããç§ãäŒããããšããŠããã®ã¯ãããã¯å²åŠçã«æ£ããããšã ãã§ã¯ãªããããã€ãã®ãã€ãºãæçšãªä¿¡å·ãèŠãé ããŠãããšããããšã§ããããŸãã...ãã®åäœã¯å®éã«å®³ãåŒãèµ·ãããããã°ã©ããŒã«æéã浪費ãããŠããŸã颚è»ã§ã
ãã¿ãŸãããããªãã®ç²ããç¹ãæ£çŽãªè³ªåãšééããŸããã çããŠåŸæããŠããŸãã ãã¶ããéçºè ã¯ãã®ã¹ã¬ãããããã¯ããããšãã§ããŸãã
"mocha --reporter mocha-allure-reporter ./tests/controllers --exit"
ã¯ç§ã®ããã«åããã å®éã --exit
ã¯éåžžã«åªããåé¿çã§ãã ãããžã§ã¯ãã§ã¯ããŒãžã§ã³5.2.0ã䜿çšããŠããŸãã
ãããã°ã©ã ã§ãmochaã䜿çšãããšãã«--exit
ãã©ã°ã䜿çšããã®ãšåçã®å¹æãåŸãæ¹æ³ã¯ãããŸããïŒ
exit / noexitã®ææžåããããªãã·ã§ã³ããNodeJSAPIã®äœ¿çšäžã«ãã©ã°æååãæž¡ãäžè¬çãªæ¹æ³ã衚瀺ãããŸããã
ä»ã®ãªãã·ã§ã³ã®ãã¿ãŒã³ã«åŸã£ãŠãç§ã¯è©ŠããŸããïŒ
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ããã¯ç§ãåãããŸããïŒistanbul cover ./node_modules/mocha/bin/_mocha --test / .test.js --exit
exit
ã¯ãããã°ã©ã ã§Mochaãå®è¡ããŠãããšãã¯äœãããŸãããfwiwã ããã»ã¹ã¯ãMocha-the-libraryã§ã¯ãªããCLIã©ãããŒã«ãã£ãŠåŒ·å¶çã«çµäºãããŸãã
æãåèã«ãªãã³ã¡ã³ã
è¿ éãªä¿®æ£ïŒ
--exit
䜿çšïŒãæäŸãã以å€ã«ãæ¬ é¥ã®ãããã¹ããèŠã€ãããšããäž»èŠãªåé¡ããŠãŒã¶ãŒã«ä»»ããããšã«åæããŸãã ä»ã¯èªåã§èŠåŽããŠããŸãããã¡ãžã£ãŒããŒãžã§ã³ãã¢ããã°ã¬ãŒããããšãã¯ããã¿ããã«ã¢ããã°ã¬ãŒãããã®ã§ã¯ãªãããªãªãŒã¹ããŒããå¿ ãèªãã§ãã ããã