Jest 24: ð å·æ°ãããæŽç·ŽãããTypeScriptã«åªãã
ãã®ããŒãžã¯ PageTurner AI ã§ç¿»èš³ãããŸããïŒããŒã¿çïŒããããžã§ã¯ãå ¬åŒã®æ¿èªã¯ãããŸããã ãšã©ãŒãèŠã€ããŸãããïŒ åé¡ãå ±å â
æ¬æ¥ãJestã®æ°ã¡ãžã£ãŒãªãªãŒã¹ãšãªãããŒãžã§ã³24ãçºè¡šã§ããããšãå¬ããæããŸãïŒååã®ãã€ããŒãªãªãŒã¹ãã4ã¶æãJest 23ããã¯8ã¶æã¶ãã®ã¢ããã°ã¬ãŒããšãªããããå šãŠã®ãŠãŒã¶ãŒã«ãšã£ãŠéèŠãªã¢ããããŒãã§ãïŒäž»ãªã ã€ã©ã€ãã¯ãJestå éšãBabel 7ã«ã¢ããã°ã¬ãŒãããããšã«ããTypeScriptã®çµã¿èŸŒã¿ãµããŒããã³ã³ãœãŒã«åºåãæ¬ èœããé·å¹Žã®åé¡ã®ä¿®æ£ãå€§èŠæš¡ãªå·®åèšç®æã®ããã©ãŒãã³ã¹åé¡ã®è§£æ±ºããããŠçæ°ãããŠã§ããµã€ãã®å ¬éã§ããâš
å šãŠã®å€æŽç¹ã«ã€ããŠã¯å€æŽå±¥æŽãã芧ãã ããã
æ°ãããŠã§ããµã€ãâ
@ortaã«ããJestãŠã§ããµã€ãã®çŸãããªãã¶ã€ã³ããã³ãã¥ããã£ã¡ã³ããŒã®@montogeekãš@brainkimã«ãã£ãŠå®è£ ãããŸããã
ãªãã¶ã€ã³ã®ç®çã¯ãJestã®çŽ æŽãããç¹åŸŽãããéç«ããããšãšãã«ãJestãäž»ã«Reactã¢ããªã®ãã¹ãããŒã«ã§ãããšããèªèãåãé¢ãããšã§ããJestã¯ããããçš®é¡ã®ãããžã§ã¯ãã§äœ¿çšã§ãããã®ããšãæç¢ºã«ç€ºããããšèããŠããŸãããªãã¶ã€ã³ã®èæ¯ã«ããèãæ¹ã¯ãã¡ãã®Issueã§è©³ããèªããŸãã
TypeScriptãµããŒãâ
Jest 24ã§ã¯å
éšãBabel 7ã«ã¢ããã°ã¬ãŒãããTypeScriptãããžã§ã¯ãã®ãµããŒããå®çŸããŸãããããã¯@babel/preset-typescriptã䜿çšããããBabelãèšå®ããã°ãJestãTypeScriptã®ãã©ã³ã¹ãã€ã«ãããã«ãµããŒãã§ããããšãæå³ããŸããFlowãšåæ§ãããã©ã«ãã®TypeScriptãµããŒãã«ãããæ³šæç¹ãšããŠãBabelã¯åã¢ãããŒã·ã§ã³ãåãé€ããŠã³ãŒããæå¹ãªJavaScriptã«ããã ãã§ãã³ãŒãã®åãã§ãã¯ã¯è¡ããŸããã
Jestã¯2017幎12æãªãªãŒã¹ã®ããŒãžã§ã³22以éBabel 7ããµããŒãããŠããŸããããBabel 6ã®ãµããŒããšã®äºææ§ãä¿ã€ããããªããžã¢ãžã¥ãŒã«ã®äœ¿çšãå¿
èŠã§ãããJest 24ã§ã¯ã³ãã¥ããã£ã¡ã³ããŒã®@milesjã®å€å€§ãªååãåŸãŠå®å
šã«Babel 7ãžç§»è¡ããŸãããããã«ããèšå®ã容æã«ãªããèšå®ãã¡ã€ã«ã®èªã¿èŸŒã¿ãèªåçãªmodulesãã©ã³ã¹ãã€ã«ãªã©ãBabel 7ã®æ©èœã掻çšã§ããããã«ãªããŸãããbabel-core@^7.0.0-bridge.0ã¯äžèŠã«ãªã£ãããåé€ããŠãã ããã
ãã¹ãå®è¡æã«åãã§ãã¯ãè¡ãããå Žåã¯ts-jestã䜿çšããŠãã ãããJestã¯ããã©ã«ãã§.tsïŒããã³.tsxïŒãã¡ã€ã«ã«Babelãé©çšããããããã©ã³ã¹ãã©ãŒããŒã®èšå®ãå¿
èŠã§ããå¥ã®æ¹æ³ãšããŠãtscãå®è¡ããããJestã©ã³ããŒã䜿çšããŠãã¹ãå®è¡ãšåæã«TypeScriptããã©ã³ã¹ãã€ã«ããããšãå¯èœã§ãïŒè©³çްã¯jest-runner-tscãã芧ãã ããã
詳现ã¯ããã¥ã¡ã³ããåç §ããŠãã ããã
äœããã®çç±ã§Babel 7ã«ã¢ããã°ã¬ãŒãã§ããªãå Žåã§ããbabel-jestãããŒãžã§ã³23ã«ç¶æããã°ãJest 24ãbabel@6ãšäœµçšã§ããŸãã
test.todoâ
Jest 23ã§ã¯ãå®è£ ãæ¬ èœããŠãããã¹ããã¹ãããããã代ããã«ãšã©ãŒãæããããã«å€æŽãããŸããããã®å€æŽã¯ã誀ã£ãŠã¹ãããããããã¹ãã®çºèŠã远跡ãå°é£ã ãšãããã£ãŒãããã¯ã«åºã¥ããã®ã§ããããããããã®å€æŽã«ãããã©ã®ãã¹ããæžããäžæžãããããã«ãã®æ©èœã䜿çšããŠããå€ãã®éçºè ã®ã¯ãŒã¯ãããŒãå£ããŠããŸããŸããã
Jest 24ã§ã¯ãåªããAVAã«ã€ã³ã¹ãã€ã¢ãããæç€ºçãªtest.todoã远å ããããšã§ãã®åé¡ã«å¯ŸåŠããŸããããã¯ãã¹ããµããªãŒã«åå¥ã«è¡šç€ºãããæžããããã¹ããçŽ æ©ãäžæžãã§ããŸããå°æ¥çã«ã¯ESLintã«ãŒã«ã«ãã£ãŠãããã€ãã®ãã¹ããæžãå¿ããŠããããšãèŠåã§ããããã«ãªããããããŸããã
test.todo('invalid input should throw');
test.todo('missing options should be normalized');

æ¹è¯ãã ãã¢ãµãŒã·ã§ã³ã¡ãã»ãŒãžâ
ãã¹ãã倱æããéãæåŸ ããã鲿ãšäºæãã¬éè¡ã確信ãæã£ãŠæ£ãã倿ããå¿ èŠããããŸããç¹ã«ãå€ãã®é²æã®äžã«é ããå°æ°ã®éè¡ãèŠéããªãããšãéèŠã§ããJest 24ã§ã¯è€æ°ã®ãããã£ãŒã§ã¢ãµãŒã·ã§ã³å€±ææã®ã¬ããŒããããæç¢ºãã€ç°¡æœã«ãªããŸããããã®æ¹åã¯Jest 25ã§ãç¶ç¶ããããããäžæçãªäžæŽåã«æ°ä»ãå ŽåããããŸãããã¹ããæ±ºããŠå€±æããªãæ¹ã«ã¯èŠããŸãããããã以å€ã®æ¹ã ã¯æåŸ éãã«åäœããªãçç±ãããç°¡åã«ãããã°ã§ããããã«ãªãã§ããããã³ãã¥ããã£ã®è²¢ç®è ã§ãã@ittordepamãä»ã®æ¹ã ã®å°œåã«æè¬ããŸãã
ãããã®å€æŽã¯ä»¥äžã®PRã§ç¢ºèªã§ããŸã: 7621, 7557, 7448, 7325, 7241, 7152, 7125, 7107, 6961ã
äŸ:
倱æããã¢ãµãŒã·ã§ã³

åäžäžèŽ

ã¢ãã¯é¢æ°ãåŒã³åºãããªã

é·å¹Žã®èª²é¡ã®è§£æ±ºâ
ãã®ãªãªãŒã¹ã§ã¯ããã€ãã®å€ãããã®èª²é¡ãä¿®æ£ããŸããã
æåã«æ³šç®ãããã®ã¯console.logåºåãæ¶ããåé¡ã§ããJestã¯ãã°ãã€ã³ã¿ãŒã»ããããŠåéããã¹ã¿ãã¯ãã¬ãŒã¹ãæäŸãããã¬ããŒã¿ãŒã«æž¡ãããããŸãããç¹å®ã®ãšããžã±ãŒã¹ã§åºåãå®å
šã«æ¶ããåé¡ããããŸããã幞ãJest 24ã§ã¯@spionããã®åé¡ã解決ããŠãããŸãããå€å€§ãªãè²¢ç®ã«æè¬ããŸãïŒ
äºã€ç®ã¯ãæåŸ
å€ãšå®éã®å€ã®ã·ãªã¢ã©ã€ãºå·®åã倧éã®æ¿å
¥å€æŽãå«ãå ŽåïŒãã¹ãã®èª€ããã·ãªã¢ã©ã€ã¶ã®æ¬ é¥ã«ããäºæãã¬å€æŽããŸãã¯ãã¹ãé§åéçºäžã®äžæç㪠倱æã«ããæåŸ
ããã倿ŽïŒã«Jestãã¡ã¢ãªäžè¶³ã«ãªãåé¡ã§ãã@ittordepamã以åã®å·®åã¢ã«ãŽãªãºã ãdiff-sequencesããã±ãŒãžã«çœ®ãæããçè«äžæå°éã®ã¡ã¢ãªäœ¿çšéã§ãã®åé¡ã解決ããŸãããããã«ããå°æ¥çã«gitãæäŸãããããªåèªåäœã®å·®åå®è£
ãå¯èœã«ãªããŸãããã®PRãåç
§ããå®è£
ã«ååãããæ¹ã¯ãã²ãé£çµ¡ãã ããïŒ
ãã®ä»ã®æ³šç®ç¹â
-
globalSetupãšglobalTeardownã®æ¹åïŒsetupFilesãšåæ§ã«ã³ãŒã倿ãé©çšãããããã«ãªããprojectsã®äžéšãšããŠããµããŒããããŸããã -
Jestã®ã¹ãããã·ã§ããä¿åå Žæãèšå®å¯èœã«ïŒå€§èŠæš¡ãªãã«ãããã»ã¹ã§Jestã䜿çšããããŒã«æ§ç¯ã«ç¹ã«æçšã§ãã
-
Jestã®CLIã«ã¯ãããŸã§ãäžéšã®ãã©ã°ããªãã·ã§ã³ããã£ã¡ã«ã±ãŒã¹ïŒäŸ:
runInBandïŒãªã®ã«å¯Ÿããä»ã®ãã®ã¯ããã§ãªãïŒäŸ:no-cacheïŒãšããç¹åŸŽããããŸãããJest 24ã§ã¯äž¡æ¹ãèªèãããããã«ãªã£ããããCLIåŒæ°ãèªç±ãªåœ¢åŒã§èšè¿°ã§ããããã«ãªã ãŸããã -
setupTestFrameworkScriptFileãsetupFilesAfterEnvã«åç§°å€æŽããé å圢åŒã«ããŸããããã®ãªãã·ã§ã³ã®ç®çãããæç¢ºã«ãªãããšãæåŸ ããŠããŸããæ¬¡æã¡ãžã£ãŒããŒãžã§ã³ã§ã¯èšå®ã®ãããªãèŠçŽããèšç»ããŠããŸãïŒè©³çްã¯äžèšã»ã¯ã·ã§ã³åç §ïŒã -
Jestãããšã«ããåäœãããâ¢ãããã«è¡ã£ãŠããããžãã¯ãæžãããããä»åã®ãªãªãŒã¹ã§ã¯ã³ã³ãã€ã«ãããéåæã³ãŒãã§äœ¿çšãããããšããã
regenerator-runtimeã®èªåæ³šå ¥ã廿¢ããŸãããregenerator-runtimeã¯åžžã«å¿ èŠã§ã¯ãªããå¿ èŠãªå Žåã¯ãŠãŒã¶ãŒã責任ãæã£ãŠå«ããã¹ãã ãšèããŠããŸãã@babel/preset-envãtargetsèšå®ïŒäŸ: Node 6+ïŒã§äœ¿çšããå Žåããããå«ããå¿ èŠã¯ãããŸããã詳现ã¯Using Babelã®ããã¥ã¡ã³ããã芧ãã ããã -
Node.js 10ã«ã¯ãã©ãŠã¶ã®Workerã¹ã¬ãããšé¡äŒŒããå®éšçã¢ãžã¥ãŒã«
worker_threadsãå°å ¥ãããŸãããJestãã©ãããã©ãŒã ã®äžéšã§ããjest-workerã¯ãchild_processã®ä»£ããã«å©çšå¯èœãªå Žåworker_threadsã䜿çšã§ããããã«ãªãããããªãé«éåãå®çŸïŒãã³ãããŒã¯ã§ã¯50%ã®æ¹åã確èªãããŠããŸããå®éšçãªæ§è³ªã®ãããJestããã¹ãã©ã³ããŒãšããŠäœ¿çšããéã¯ããã©ã«ãã§æå¹ã«ãªããŸããããèªèº«ã®ãããžã§ã¯ãã§ä»ãã䜿çšå¯èœã§ãïŒNode.jsã§å®éšçã¹ããŒã¿ã¹ããææ Œããéã«ã¯ããã©ã«ãã§æå¹åããäºå®ã§ãã
ç Žå£ç倿Žâ
ãã¹ãŠã®ç Žå£ç倿Žã¯å€æŽå±¥æŽã«èšèŒãããŠããŸãããç¹ã«æ³šç®ãã¹ãç¹ãããã€ã玹ä»ããŸãïŒ
-
Micromatch 3ãžã¢ããã°ã¬ãŒãããŸããããã¹ãŠã®ãŠãŒã¶ãŒã«åœ±é¿ããããã§ã¯ãããŸããããJest 23ã§äœ¿çšãããŠããããŒãžã§ã³2ãããglobã®è§£æãå³å¯ã«ãªã£ãŠããŸããåé¡ãçºçããå Žåã¯ãã¡ãããã³é¢é£ã€ã·ã¥ãŒã§ç¡å¹ãªglobã®äŸã確èªããŠãã ããã
-
Node 4çšã®ã³ãŒãæ®éªžãåé€ããŸããã以åã¯æè¡çã«Jest 23ãNode 4ã§å®è¡å¯èœã§ããããä»åŸã¯ããªãã£ã«ããã©ã³ã¹ãã€ã«ãªãã§ã¯äžå¯èœã§ãã
-
ã¹ãããã·ã§ããå ã®ã¢ãã¯é¢æ°ã®ã·ãªã¢ã©ã€ãºæ¹æ³ã«å€æŽããããŸããã¢ããã°ã¬ãŒãåŸã¯æŽæ°ãããã¹ãããã·ã§ãããå¿ ãå確èªããŠãã ãããé¢é£PRã
-
Jestã¯
regenerator-runtimeãèªåæ³šå ¥ããªããªããŸãããé¢é£ãããšã©ãŒãçºçããå Žåã¯ã@babel/preset-envãªã©ã䜿çšããŠasync颿°ãé©åã«ãã©ã³ã¹ãã€ã«ããããBabelãèšå®ããŠãã ãããé¢é£PRã
ä»åŸã«ã€ããŠâ
State Of JS 2018ã§Jestããæé«æºè¶³åºŠãè³ãåè³ããçµæã«æ·±ãæéãåããŠããŸãã2018幎ã®ããäžã€ã®å€§ããªåºæ¥äºã¯ã10æã«Jestã®é±éããŠã³ããŒãæ°ãåããŠ200äžãçªç Žããããšã§ããçæ§ã«æè¬ç³ãäžããŸãã
ã³ãã¥ããã£ãã瀺ãããä¿¡é Œã«å¿ããæè¬ãããšãšãã«ãä»åŸããã®ä¿¡é Œãç¯ãäžããŠãããããšèããŠããŸããJest 24ããã³å°æ¥ã®ãªãªãŒã¹ã§ã¯ããã®çŽ æŽãããåºç€ãããã«çºå±ãããJavaScriptéçºè ã®ããŒã«ãããã«äžå¯æ¬ ãªååšã§ããç¶ããããšãçŽæããŸãã
ä»åã®ãªãªãŒã¹ã§ã¯ãOpen Collectiveã®è³éãæŽ»çšãããã°å ±å¥šéå¶åºŠãåããŠå°å ¥ããŸããããã®åãçµã¿ã¯ãéã³ã¢éçºè ã®æ¹ã ãæ°ããã©ã³ãã£ã³ã°ããŒãžå®è£ ã«åå ãããã£ãããšããŠå¹æçã§ãããç¹ã«ãJestã®ã°ããŒãã«å€æ°ãšNodeã®ã°ããŒãã«å€æ°ãäžèŽããªããšããé·å¹Žæžæ¡ã ã£ãåé¡è§£æ±ºã«åããŠåé²ããŠããŸããä»åŸããã®å¶åºŠãæ¡å ããããšèããŠããŸãã®ã§ãå ±å¥šé察象ãšããŠé©ããæªè§£æ±ºãã°ããæã¡ã®æ¹ã¯ãã²ãç¥ãããã ãããçŸåšå ±å¥šéãèšå®ãããŠãããã±ããã¯issueã©ãã«ãã確èªã§ããŸãã
ãã§ã«Jest 25ã®ãªãªãŒã¹èšç»ãé²è¡äžã§ããæå€§ã®ç®çæ©èœã¯èšå®ã·ã¹ãã ã®å·æ°ã§ããªãã·ã§ã³ã® éè€ãã°ãã/æ£èŠè¡šçŸã®æ··åšãªã©ã«ããçŸè¡ã®èšå®ãè€éåããŠãã課é¡ã解決ããŸããJestã®èšå®äœç³»ã«ã€ããŠã®ãæèŠããã¡ãã®issueã§å€§åéããŠããŸãã
ã³ãŒãããŒã¹ãFlowããTypeScriptãžç§»è¡ããèšç»ã«ã€ããŠããåç¥ãããããŸããããã®ç§»è¡ã«ãããããå€ãã®ã³ã³ããªãã¥ãŒã¿ãŒãåå ãããããªãã2019幎ã®JavaScriptãã¹ãç°å¢ãããã«é²åããããšãæåŸ ããŠããŸããð ãã®å€æŽã¯è¿ãå°æ¥ã®ãã€ããŒãªãªãŒã¹ã§å®è£ äºå®ã§ããç§»è¡ã«é¢ãããæèŠã¯RFCãžãå¯ããã ããã
æåŸã«ãJestã®å éšæ§é ã«èå³ã®ããæ¹ãžã@cpojerãJestã®ã¢ãŒããã¯ãã£æŠèŠã解説ããåç»ãå ¬éããŸãããããã«è©³ããç¥ãããæ¹ã¯ãæ°è»œã«ãåãåãããã ãããåç»ã¯åœãµã€ãã®ã¢ãŒããã¯ãã£è§£èª¬ããŒãžã§ã芧ããã ããŸãã
楜ãããã¹ããïŒ ð
