Jest 20: ð ãã¹ããæ¥œãããªã & ððœ ãã«ããããžã§ã¯ãã©ã³ããŒ
ãã®ããŒãžã¯ PageTurner AI ã§ç¿»èš³ãããŸããïŒããŒã¿çïŒããããžã§ã¯ãå ¬åŒã®æ¿èªã¯ãããŸããã ãšã©ãŒãèŠã€ããŸãããïŒ åé¡ãå ±å â
æ°ã¶æåã«çºè¡šããJest 19ã¯äž»èŠãªæ°æ©èœãåããåœææå€§ã®ãªãªãŒã¹ã§ãããã仿¥å ¬éããJest 20ã¯åããŒãžã§ã³ã®2åã®å€æŽã䌎ãããã¹ãã©ã³ããŒã®å®å šãªæžãæãã å®çŸããæ°ããªãã¹ãAPIã远å ããŠããŸãããã®æ°ãªãªãŒã¹ã¯ãããžã§ã¯ãã®ã«ã¹ã¿ãã€ãºãšèšå®ã«æ°ããªæ¬¡å ããããããšåæã«ãã¢ããã°ã¬ãŒããé©ãã»ã©å®¹æã«ããŸãããèŠçã®ãªãJavaScriptãã¹ãããè¶ ããŠãJestã¯ä»ã楜ããJavaScriptãã¹ãäœéšãæäŸããŠãããšç¢ºä¿¡ããŠããŸããäž»èŠãªæ°æ©èœãšå€æŽç¹ãæ·±æãããŠã¿ãŸãããïŒ
ãã«ããããžã§ã¯ãã©ã³ããŒãšèšå®ã®å€§æ¹é©â
ãããŸã§Jestã¯äžåºŠã«1ã€ã®ãããžã§ã¯ãã§ããåäœã§ããŸããã§ãããããã¯ç¬èªã®ã»ããã¢ãããšèšå®ãæã€è€æ°ã®å°ããªãããžã§ã¯ããæ±ãå Žåããã°ãã°ç ©éã§ãããJest 20ã§ã¯ãã¹ãã©ã³ããŒãå®å šã«æžãçŽããåäžã®Jestã€ã³ã¹ã¿ã³ã¹å ã§è€æ°ã®ãããžã§ã¯ããåæã«å®è¡ã§ããããã«ãªããŸãããäŸãã°Reactããã³ããšã³ããšNode.jsããã¯ãšã³ããåæã«æ±ãå Žåãªã©ã§ãããã¡ãã¯JestãReactãRelayãYarnããããŠJestèªèº«ã®ãã¹ããåæã«å®è¡ããæ§åã§ãïŒ

Jestã¯ã¿ãŒããã«ã®çžŠã¹ããŒã¹ãç¯çŽãããããååãã¹ãå®è¡åŸã«äœ¿çšã¬ã€ããæããããããã«ãªããŸããã
ããã«ãJestå
éšã®èšå®ã·ã¹ãã ãå®å
šã«èŠçŽããŸãããèšå®ãã¡ã€ã«ã§æå®ãããªãã·ã§ã³ãCLIçµç±ã§äžæžãã§ããããã«ãªããŸãããåæã«ãJestã¯ããã©ã«ãã§jest.config.jsãã¡ã€ã«ãæ¢ãããã«å€æŽãããJavaScriptã§Jestèšå®ãå®çŸ©ã§ããããã«ãªã£ãã»ããåŸæ¥éãpackage.jsonçµç±ã§ã®èšå®ãå¯èœã§ãããããã®æ°æ©èœã«ããããããŸã§ä»¥äžã«åŒ·åãªæ¹æ³ã§Jestãçµã¿åãããããŸããäŸãã°monorepoå
ã®è€æ°ãããžã§ã¯ãã«ãŸãããã³ããããã倿Žãã¡ã€ã«ã»ãããæå®ããJestãå®è¡ãããã¹ããç¹å®ãããå Žåãæ¬¡ã®ããã«CLIåŒæ°ãçµã¿åãããããŸãïŒ
$ jest --projects projectA projectB --listTests --findRelatedTests projectA/banana.js projectB/kiwi.js
[
"projectA/banana.test.js",
"projectB/kiwi.test.js",
"projectB/pineapple.test.js",
]
ããã¯ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ïŒCIïŒã·ã¹ãã ã§ç¹ã«æçšã§ããã«ãªã¯ãšã¹ãããšã«ãã¹ãã®ãµãã»ããã®ã¿ãå®è¡ããå°ããªå€æŽããšã«æ°åã®ãã¹ããã¡ã€ã«ãå®è¡ããã®ãé²ããŸãã
æåŸã«ãTypeScriptäœ¿çšæã®ã³ãŒãã«ãã¬ããžãé©åã«ãããã³ã°ããããã«ãªããæªãã¹ããã¡ã€ã«ã®ã³ãŒãã«ãã¬ããžãã¯ãŒã«ãŒããã»ã¹ã§å®è¡ããããšã§ããã®æ©èœã®å€§å¹ ãªé«éåãå®çŸããŸããã
æ°æ©èœãšæ¹åããããã¹ãAPIâ
ãã广çãªãã¹ãäœæãæ¯æŽããããããã¹ãAPIã«æ°å€ãã®è¿œå ãšæ¹åãè¡ããŸããããããã®æ¹åã¯ãã¹ãŠã³ãã¥ããã£ã¡ã³ããŒã®æã«ãããã®ã ãšããç¹ã匷調ããŠãããŸãïŒ
-
éåæãã¹ãã®æ¹åïŒ expectã«resolves/rejects修食åã远å ããasync/PromiseããµããŒãïŒ
expect(Promise(âŠ)).resolves.toEqual(âŠ)ãããã¥ã¡ã³ãåç § -
nåã®ã¢ãµãŒã·ã§ã³ãæåŸ ïŒ æ¢åã®expect.assertions(n)ã«å ããæ°ããexpect.hasAssertions()ã§ãã¹ãã«å°ãªããšã1ã€ã®ã¢ãµãŒã·ã§ã³ãããããšãä¿èšŒå¯èœ -
Lintãã©ã°ã€ã³ïŒ
eslint-plugin-jestã«valid-expectã«ãŒã«ã远å ããexpectåŒã³åºãåŸã«ã¢ãµãŒã·ã§ã³ã確å®ã«åŒã°ããããã«ããŸãããã¢ãµãŒã·ã§ã³åŒã³åºããæ¬ ããexpect(banana);ã®ãããªãã¹ã鲿¢ããŸã -
Pretty-Formatãã©ã°ã€ã³ïŒ Jestã«å€æ°ã®æ°ããpretty-formatãã©ã°ã€ã³ã远å ãImmutable.jsããŒã¿æ§é ãšHtmlElementsãã¢ãµãŒã·ã§ã³å€±ææãã¹ãããã·ã§ããã§èŠããã衚瀺
-
ã«ã¹ã¿ã ç°å¢ïŒ ãã¹ããã¡ã€ã«ã®doc-blockã³ã¡ã³ãã«
@jest-environment node|jsdomã¢ãããŒã·ã§ã³ã远å ããåå¥ãã¹ãã§ããã©ã«ããšã¯ç°ãªããã¹ãç°å¢ã䜿çšå¯èœã«
以äžã¯ããã¹ãŠã®æ°APIãçµã¿åããã£ãŠãã¹ãäœéšãããæ¥œããããå ·äœäŸã§ãïŒ
/**
* @jest-environment node
*/
test('compares apples and bananas', async () => {
expect.hasAssertions(); // Ensure this test has at least one assertion.
await expect(
Promise.resolve(Immutable.Map({apples: 1, bananas: 2})),
).resolves.toEqual(Immutable.Map({apples: 1, bananas: 3}));
expect('banana'); // valid-expect in eslint-plugin-jest will show an error.
});
ãã®äŸã§ã¯ããã¹ã倱ææã«æ¬¡ã®ãããªåºåã衚瀺ãããŸãïŒ

ç Žå£ç倿Žâ
ã¡ãžã£ãŒãªãªãŒã¹ããšãšåæ§ã«ãå°æ¥ã®å€§èŠæš¡ãªå€æŽãå¯èœã«ãããã¹ãäœéšãæ°ããªã¬ãã«ãžåŒãäžãããããããã€ãã®ç Žå£ç倿Žãè¡ã£ãŠããŸããä»åç§ãã¡ã¯ã倧倿°ã®JestãŠãŒã¶ãŒã«åœ±é¿ããªãAPIã®ã¿ã倿ŽããããåªããŸããïŒ
-
Jasmine 2.5ã®ãã©ãŒã¯: Jasmineæ¬äœããã©ãŒã¯ããJestç¬èªã®ãã¹ãã©ã³ããŒã®æææš©ãååŸããŸãããããã«ããå°æ¥ãŠããããã¹ãäœéšã®ããããåŽé¢ãæ¹åã§ããŸãããåœé¢ã¯æ®µéçãªãªã©ã€ããšAPIãµãŒãã§ã¹ã®çž®å°ã«æ³šåããŸããJasmine APIãäžè¶³ããŠããããã«ãã¹ãã倱æããå Žåã¯ã
jestãŸãã¯expectãªããžã§ã¯ãã§åçã®æ©èœãå©çšã§ããã¯ãã§ããããã«äŒŽããå€ãã®ã³ãŒãããŒã¹ã§äžè¬çã«äœ¿çšãããŠããªãJasmineæ©èœ ãåé€ããŸããã -
CIç°å¢ã§ã®æ°èŠã¹ãããã·ã§ãã: ã¹ãããã·ã§ããã¯åžžã«ãã¹ããšãã¹ã察象ã¢ãžã¥ãŒã«ãšå ±ã«ã³ãããããå¿ èŠããããŸããJestã倿ŽããCIç°å¢ã
--ciãã©ã°æå®æã«ã¯æ°ããã¹ãããã·ã§ãããèªåä¿åããªãããã«ããŸããïŒéåžžæšå¥šãããªãïŒãã®åäœãäžæžãããã«ã¯--updateSnapshotãã©ã°ã䜿çšã§ããŸãã -
Babel-Polyfill: Jestã¯ä»¥åãbabel-jestäœ¿çšæã«èªåçã«
babel-polyfillãèªã¿èŸŒã¿ãã¡ã¢ãªãªãŒã¯ãåŒãèµ·ãããŠããŸãããã»ãšãã©ã®Node.jsããŒãžã§ã³ã§ã¯babel-polyfillã®èªã¿èŸŒã¿ã¯äžèŠãªããããã®èªåèªã¿èŸŒã¿ãåé€ãã代ããã«éåæ/åŸ æ©æ§æããµããŒãããregenerator-runtimeã®ã¿ãããã©ã«ãã§å«ããããã«å€æŽããŸãããbabel-polyfillãå¿ èŠãªå Žåã¯ãã»ããã¢ãããã¡ã€ã«ã§æåã§èªã¿èŸŒãã§ãã ããã
ãã®ä»ã®æ¹åç¹â
-
ããã¥ã¡ã³ã: ãã¹ããã©ã¯ãã£ã¹ã®å ±æãšå¹æçãªãã¹ãææ³ã®æè²ã¯ãããè¯ããœãããŠã§ã¢éçºã«äžå¯æ¬ ã§ããé廿°é±éã§ã¹ãããã·ã§ãããã¹ãFAQãäž»èŠJSã©ã€ãã©ãªãšã®é£æºã¬ã€ããåè¿°ã®æ°æ©èœã«é¢ããããã¥ã¡ã³ãã远å ããŸããã
-
翻蚳: Jestããã¥ã¡ã³ãã®ç¿»èš³ãžã®ååãåŒã³ãããŠããŸããããå€ãã®æ¹ãJestãåŠã³ããããªããããååãã ããã
-
ã«ã¹ã¿ã ã¬ããŒã¿ãŒ:
reportersèšå®ãªãã·ã§ã³ãéããŠã«ã¹ã¿ã ãã¹ãã¬ããŒã¿ãŒããµããŒãããŸãããXML圢åŒãªã©ã§ã®ã¬ããŒãçæã«ãããJestã®åºåãã«ã¹ã¿ãã€ãºãããä»ã®ããŒã«ãšçµ±åãããã§ããŸããããã¥ã¡ã³ãåç § -
ã³ãŒãããŒã¹ã®å¥å šæ§: Jestãè¿ éã«é²åã§ããã®ã¯ãã³ãŒãããŒã¹ã®å¥å šæ§ã«å€å€§ãªæéãè²»ãããããã§ããPrettierã®æ©æå°å ¥ãFlowã«ãã¬ããžã®å€§å¹ åäžãJasmineãã©ãŒã¯ã«ãããã¹ãã©ã³ããŒã©ã€ãã©ãªæ¹åãå°æ¥ã®æåã«åããJestæ¬äœã®å€§èŠæš¡ãªã©ã€ãã宿œããŸããã
-
ãã°ä¿®æ£: åžžéããJestã§ã¯æ°å€ãã®ãã°ä¿®æ£ãè¡ããŸãããå®å šãªå€æŽå±¥æŽã¯Jestãªããžããªã§ç¢ºèªã§ããŸãã
Jestã«é¢ããè¬æŒâ
æè¿ãJestã³ã¢ããŒã ãšã³ã³ããªãã¥ãŒã¿ãŒãã«ã³ãã¡ã¬ã³ã¹ã§Jestãšãã®éçºäœéšã«ã€ããŠè¬æŒãå§ããŠããŸãïŒ
-
Rogelio GuzmanãReact Confã§Jestã¹ãããã·ã§ãããšãã®å ã«ã€ããŠè¬æŒ
-
ç§ïŒcpojerïŒãFacebookã®F8ã«ã³ãã¡ã¬ã³ã¹ã§é«å質JavaScriptããŒã«ã®æ§ç¯ã«ã€ããŠè¬æŒ
ä»åããJavaScriptã³ãã¥ããã£ã®çæ§ã®ãæ¯æŽããªããã°ããã®ãªãªãŒã¹ãå®çŸããããšã¯ã§ããŸããã§ãããJavaScriptãã¹ãã®æ¹åã«å ±ã«åãçµããæ©äŒãããã ããå¿ããæè¬ããŠãããŸããJestãžã®è²¢ç®ããæ€èšã®æ¹ã¯ãã©ãããæ°è»œã«GitHubãDiscordã§ã声ãããã ããã
