@isaacsã¯ãMochaãã¹ããnode
ãŠããªããšäžæºãèšã£ãŠããŸãã ããã¯ã°ãããèŠæ
ã ãšæããŸããã圌ã¯å£°ã®å°æ°æŽŸã代衚ããŠãããšæãã®ã§ã圌ããé»ãããããšã¯ãããã䟡å€ãããã§ãããã
ãããç§ãæ³åããããšã§ãïŒäŸãã°describe
ã it
ãªã©ãããã©ã«ãã§äœ¿çšã§ãã代ããã«ãããªãã¯ããããã§ããã
var mochaBDD = require("mocha/bdd");
var describe = mochaBDD.describe;
var it = mochaBDD.it;
// ok, stupid boilerplate is over but at least I don't have to use a test runner, woohoo!
ãããã¯ãããã¯ãã ãããããŸãã
require("mocha/bdd");
ãããŠããã¯ããªãã®ããã«ããã€ãã®ã°ããŒãã«ãèšå®ããã§ãããã
ã©ãæããŸããïŒ
require('mocha')
ãšãã«ããã®ãããããã°ããŒãã«ã¹ããŒã¹å
šäœã«ãã³ããããšããŠããçŸåšã®ç¶æ
ãããåªããŠããŸãã
ã°ãããŠãããšã¯æããŸãããããã¹ãŠãšã®ãã¬ãŒããªãããããŸãã ç§ã¯ãã®ãããªãã®ã«æºè¶³ããŠããã§ãããïŒ
var Mocha = require('mocha');
var mocha = new Mocha(options);
mocha.describe('blah blah', function....
誰ãããã䜿çšããŸããããå°ãªããšãç§ãã¡ãçŸåšæã£ãŠãããã®ãå®è£ ããããã®ããã¯ãªãŒã³ãªæ¹æ³ã«ãªãã§ãããã 誰ããæ¯åã»ããã¢ããããªããã°ãªããªãå®åæã_ãã³_ãããŸãããããããCLI颚ã®APIã«çµã蟌ãããšãã§ããã°ãåé¡ãããŸããã ARGVã§æž¡ãããã°ããã®lib / cli.jsããã£ããšããŠãã誰ããããã䜿çšãããã©ããã¯çãããã§ãããCLIããªããŠãããªãç°¡åã«äœ¿çšã§ããŸãããããã¯ãäžéšã®ãšããžã±ãŒã¹ãè¶ ããŠæ¬åœã«æãã§ãã人ãããªãããšã瀺ããŠããŸãã
@visionmediaããã¯ããªãããããã§ãã ç§ãrequire("mocha/bdd")
ãªã©ãææ¡ããçç±ã¯ãæ¢åã®ã¢ã«ã«é¢ããŠã¯å®è£
ãéåžžã«ç°¡åã ããã§ããããããããããããªãã®æ¹ãè¯ãã§ãããã ïŒããšãã°ãäžåºŠã«è€æ°ã®ãã¹ãã¹ã€ãŒããå®è¡ããããã«äœ¿çšããããšãæ³åã§ããŸãããŸããprocess.onïŒ 'uncaughtException'ïŒã®äœ¿çšã®ããã«ããããå£ããŸãããç§ãäœãæå³ãããã¯ããããŸããïŒ
ãã€ããã«ãªã¯ãšã¹ããè©ŠããããããŸããã
ããã¯ã代å
¥ãç Žæ£ããããšã«ããå°ãå°æ¥ã®JavaScriptã倧ãã«åœ¹ç«ã€çŽ æŽãããäŸã§ãã
https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/1.7#Destructuring_assignment_ïŒ
28Merge_into_own_page.2FsectionïŒ
29
var [describe,it,beforeEach,afterEach] = new require("mocha")(options);
ããã«å¯ŸããããŒãããŒã¢ããŒã®ãµããŒããããã°ããã®ã«ãšæããŸãã
ãããã§ãããšããèãã§ãã
node test/a-mocha-test.js
ãããŠãããã¯ãã®ãã¹ããå®è¡ããŸãããïŒ
@glenjamin yup
nodespecã§èªåã§ãããå®è¡ããããšããŸããããåé¡ã¯å®éã«ã¯ããŸããŸãªé¢æ°ã䜿çšå¯èœã«ããããšã§ã¯ãªããå®è¡ãéå§ããæ¹æ³ãšã¿ã€ãã³ã°ãææ¡ããããšã§ããã2ãã¹ã®å®çŸ©/å®è¡ã¢ãããŒããå¿ èŠã§ãã
ç§ãæãã€ãããªãã·ã§ã³ã¯æ¬¡ã®ãšããã§ãã
1ïŒãã¹ãŠã®ãŠãŒã¶ãŒã«mocha.execïŒïŒã®ãããªãã®ããã¹ãŠã®ãã¡ã€ã«ã®æåŸã«è¿œå ããŠããããŸãã
2ïŒã³ã¢ãprocess.onïŒ 'exit'ïŒã®ãããªãã®ãè¿œå ããã®ãåŸ
ã¡ãŸãããã€ãã³ãã«ãŒãããŸã å©çšå¯èœãªå Žå
3ïŒåãââã¡ã€ã«ã«ãããã¬ãã«ã®describeãããã¯ã1ã€ãããªãããšãæ³å®ãããããçµäºãããšå®è¡ãéå§ããŸã
ïŒ1ïŒã¯ããããæãåªããŠããã次ã®ããã«ãªããŸãã
var run = require('mocha/required');
describe('blah blah' , function() {
// ..
});
run();
mocha
ã©ãããŒãªãã§å®è¡ããå¿
èŠãããå Žåãããã¯node ./node_modules/.bin/_mocha test/a-mocha-test.js
ãå®è¡ãããããå€ããè¿œå ããããã«ã¯èŠããŸããã
ããã¯ãã¢ã«ãçŸåšäœ¿çšãããŠããæ¹æ³ãšã¯ãã¯ãäžèŽããªããšæããŸãã ãã®ã¹ã¬ããã¯1幎以äžéã¢ã¯ãã£ãã«ãªã£ãŠãããããä»ã¯éããŠããŸãã
ããã§ã誰ããããã«èå³ãæã£ãŠããå Žåã¯ãã³ã¡ã³ããããããã«ãªã¯ãšã¹ããææ¡ããŠãã ãããæ€èšããŸã:)
ãããåéã§ããŸããïŒ ãŸã ãŸã èå³ããããŸãã node test.js
ã¢ã«ãã¹ãã ããã§ããªãããšããç§ãšMapboxã®ååãã¢ã«ããããŒããã¿ãããªã©ã®ããŒãã¹ã«ç§»è¡ããäž»ãªçç±ã®1ã€ã§ããã å人çã«ã¯ã¢ã«ã«åºå·ãããã®ã§ããããããŒãèœåãã®è°è«ã¯ãã説åŸåããããŸãã
ç·šéïŒãnode-abilityãåŒæ°ã¯@tmcwã«ãã£ãŠããã§è©³ãã説æãããŸããã
æ確ã«ããããã«ã require
ã€ã³ã¿ãŒãã§ã€ã¹ããªãããšã¯ããŠãŒã¶ãŒã®èŠ³ç¹ããã¯ããã§ã®äž»èŠãªãããã«ãŒã§ã¯ãããŸããã 以äžã¯ãåäœããããã«ãã§ã«ææžåãããŠããŸãã
var describe = require('mocha').describe;
var before = require('mocha').before;
var it = require('mocha').it;
ãããŠããã¯ES6ã§ããè¯ããªããŸãïŒ
import { describe, before, it } from 'mocha';
ããã説æããŠãããŠããããšãã :) mochaãã€ããªã䜿çšããŠå®è¡ãããšãã«ãã§ã«ãã®æ©èœãæäŸããŠããå Žåã¯ãããŒãã§ãåãããšãè¡ããšãããšæããŸãã ããã調ã¹ãŸãã ããããšãïŒ
ããŒãã«beforeExitããã¯ãããã®ã§ãããã¯ããªãå®è¡å¯èœã®ããã§ãã
次ã®ãããªãã®ã§ããå¿ èŠããããŸã
var { describe, it } = require('mocha/auto')
ããã TJãèšã£ãããã«ãåé¡ã¯ããã¹ãŠããããŒã察å¿ãã«ãããšããŠããæçšã§ããããã«ã¯ãã€ã©ãŒãã¬ãŒããå€ãããå¯èœæ§ãããããšã§ãã
ããããªãã...
@glenjamin beforeExit
ã®ãããºã¢ããã«æè¬ããŸãã ããã掻çšã§ãããšæããŸãã 人ã
ã¯ãããããããããŸãã«ãå€ãã®ãéæ³ãã ãšäžå¹³ãèšãã§ããã...
3cdd4a04c48193cceac6af7db72af06d380014a9ã«æŠå¿µå®èšŒãè¿œå ããŸãã
ãšã«ãããå°ãæéãããããŸããããã¹ãŠã®ã€ã³ã¿ãŒãã§ãŒã¹ã§ç°¡åã«äžè¬åã§ãããšæããŸãã ããã§ã¯ãGrowlã mocha.opts
ãŸãã¯çµäºã³ãŒããªã©ã®ä»ã®ããŸããŸãªprocess
é¢é£ã®ãã®ã¯ãµããŒããããŠããŸããã bin/_mocha
ããããã€ãã®ã³ãŒããæœåºããããã§åå©çšããå¿
èŠããããŸãã 次ã«ãåŒæ°ã®ãµããŒãããããŸãã äŸãã°ïŒ
$ node test/my-test.js --reporter=dot
誰ããäœãææ¡ãããã°ãlemmeã¯ç¥ã£ãŠããŸã
bin/_mocha
ã«ãããã®ã®ããã€ããããçš®ã®CLIã«æœåºããããšã¯ãé¢ä¿ãªãããªãè³¢æã ãšæããŸãã
ãããæ¬åœã«äŸ¿å©ãªè¿œå ãã©ããã¯ãŸã ããããŸãããïŒ
次ã®ããããã«å®éçãªéãã¯ãããŸããïŒ
node test/test.js
./node_modules/.bin/mocha test/test.js
PATH=./node_modules/.bin:$PATH mocha test/test.js
npm test -- test/test.js
node
ãã¹ããã¡ã€ã«ãå®è¡ã§ããªãããã«ã¢ã«ã䜿çšããŠããªã人ã¯ãåã«ã¢ã«ãå«ãã§èšãèš³ãæ¢ããŠãã人ã ãšæããŸãã ã¢ã«ã¯çã®ããã§ããå¿
èŠã¯ãããŸããïŒsmileïŒ
@glenjaminããã¯ã¡ãã£ãšèµ·ããå¿ èŠããããŸãã Mochaã«ã¯ã³ã¢ããã°ã©ããã£ãã¯APIãå¿ èŠã§ãã ãã®è¯ãå¯äœçšã¯ãããŒãå¯èœãªãã¹ãã§ãã ãããå®è¡ãããç°å¢ã¯ãããããã©ãŠã¶ãCLIããŸãã¯ãã®ä»ã®ãã®ã§ãããã©ããã«ããããããããã°ã©ã APIãæ¶è²»ããŸãã Mocha.appã誰ãïŒ :)
ãã®æ©èœã«èå³ããããŸãïŒ
+1ã®å ŽåïŒ
import { describe, before, it } from 'mocha';
çŸåšconst {describe, it} = require('mocha')
ããããŸãããã°ããŒãã«ã¯ãã§ã«ååšãããããå¿
èŠãããŸããã
ãã©ãŠã¶ã®ãµããŒãã«é¢å¿ãããå Žåã¯ããã€ã§ãconst {describe, it} = window.mocha
å®è¡ã§ããŸãã ç§ãã¡ã¯ãã§ã«ãã£ã€ã®ããã«ãããããªããã°ãªããŸããã
ãŸãã const {describe, it} = window
ãããã ãšæããŸãã
ããã¯mochaã®ã¢ãŒããã¯ãã£ã«ãšã£ãŠéåžžã«åºæ¬çãªãã®ã§ãããããmochaã¯ãã³ãã«æã«
mochaã¯ãåäžã®åå空é以å€ã®ã°ããŒãã«ãå®çŸ©ããã¹ãã§ã¯ãªããšæããŸãããããããã©ãŠã¶å°çšã§ãã
mocha
å®è¡å¯èœãã¡ã€ã«ã¯åŒãç¶ãã°ããŒãã«ã䜿çšããŸãã ããã¯ããããå€ãããªãã§ãããã
ç§ãã¡ãçãããšãã§ããïŒãããŠãã¹ãã§ããïŒã®ã¯ãã°ããŒãã«åå空éãæ±æããããšãªãã node
ãä»ããŠã¢ã«ãã¹ããç°¡åã«å®è¡ããæ©èœã§ãã ããããã®åé¡ã®ç®çã§ãã
æ®å¿µãªãããããã¯ãããµã¹ãµã€ãºã®ãã糞ã®ããŒã«ã§ããã誰ã解ãæããæéããšãã«ã®ãŒãæã£ãŠããŸããã§ãããããã¯ãã®åé¡ã®æ代ããæããã«ãªãã¯ãã§ã...
mocha
å®è¡å¯èœãã¡ã€ã«ã¯åŒãç¶ãã°ããŒãã«ã䜿çšããŸãã ããã¯ããããå€ãããªãã§ãããã
ã¢ã«ãã©ã®ããã«æ§æãããŠãããã«ã€ããŠã¯äœãç¥ããŸãããããã®åäžã®èšèšã®éžæãåé¡ã®åå ã§ãããšæèšã§ããŸãã
ããããããã§ãïŒ
ç§ã¯å®éã«ã³ãŒããããäžåºŠèŠãŠãååã°ããŒãã«å€æ°ãããã¯ããããšãããšãã«äœãééã£ãŠããããç解ãã node test/someFile.js
ã§ãã¹ããã¡ã€ã«ãå®è¡å¯èœã«ããããã«äœãå¿
èŠããèããŸãã
require("mocha").it
ãšããŠãšã¯ã¹ããŒããããŸãïŒä»ã®ã€ã³ã¿ãŒãã§ãŒã¹ã¯ãšã¯ã¹ããŒããããŸããïŒã ïŒæ³šïŒä»ã®ã€ã³ã¿ãŒãã§ãŒã¹ãéžæããããšãã«ãããå£ããªãçç±ã¯ãMochaã«ãã°ããããã»ãšãã©ã®å Žåãå¥ã®ã€ã³ã¿ãŒãã§ãŒã¹ãéžæãããŠããŠãBDDã€ã³ã¿ãŒãã§ãŒã¹ãã»ããã¢ããããããã§ããïŒ2207ïŒããããé¢ããããšæããŸããglobal
ãããŒãã³ãŒãã£ã³ã°ãã代ããã«ãçºè¡ãããã³ã³ããã¹ããªããžã§ã¯ãã䜿çšããå ŽåïŒãMocha
ïŒ require("mocha")
ãšã¯ã¹ããŒããããã®ïŒã«ãã®é¢æ°ãè¿œå ãããã¹ãŠã®å¯èœãªã€ã³ã¿ãŒãã§ã€ã¹ãæã€ããšã¯ã§ããŸãããMocha
BDDããã³TDDã€ã³ã¿ãŒãã§ãŒã¹ããšã¯ã¹ããŒããç¶ããã®ã¯é£ããã§ããããrequire("mocha/tddInterface").test
ãŸãã¯require("mocha/interface/bdd").it
ãå®è¡ããªãéããMochaã®UIãTDDã«èšå®ããŠBDDã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšãããããã®éãè¡ã£ããããªãã§ãã ããïŒ "mocha/lib/interfaces/<interface name>"
ãšæ··åããªãã§ãã ããïŒãå®è£
ã¯ã©ã€ãã§ãïŒãmocha test/someFile.js
代ããã«node test/someFile.js
ãå®è¡ã§ããvar Mocha = require("mocha"); var mocha = new Mocha()
ãªã©ïŒã€ãŸããããã°ã©ã ã€ã³ã¿ãŒãã§ã€ã¹ãïŒã䜿çšããŠãã人ã
ãå£ãäœè£ã¯ãªããšæããŸãã ãããæ€åºããŠMochaã®ãããŒã察å¿ã®æ¹æ³ããå®è¡ããªãããã«ããããïŒç§ãã¡ã«ãšã£ãŠã¯ç°¡åã§ããããŠãŒã¶ãŒããã®ãªããã€ã³ãå¿
èŠã§ãïŒå¥ã®ã€ã³ããŒããä»ããŠããŒãæ©èœã«ã¢ã¯ã»ã¹ããå¿
èŠããããŸãïŒäŸïŒ require("mocha/nodeable").it
ïŒ .describe
ãªã©ïŒã 代ããã«ãã®ãŒããã¯ã®ç¹å¥èŒžå
¥require("mocha")
å®å
šã«å®æœããããã«å®¹æã«ãªãã ãããšç§ã®é¡æã§åãŸãããã«ïŒèª¬æãšåé¿ã°ããŒãã«ã»ã¯ã·ã§ã³ã«æ£åœåïŒã®ã€ã³ã¿ãŒãã§ã€ã¹ã茞åºããè±åŽããããã«Mocha
ãªããžã§ã¯ãrequire("mocha")
ã«ãã£ãŠãšã¯ã¹ããŒããããŸããnode test/someFile.js
ãå®è¡ããã«ã¯ã someFile.js
ãMochaã®ã€ã³ã¿ãŒãã§ã€ã¹ãã€ã³ããŒãã§ããã ãã§ã¯äžååã§ããMochaãã€ã³ã¹ã¿ã³ã¹åããå¿
èŠãããããã¹ãããã¹ãŠã»ããã¢ãããããåŸãMochaãå®è¡ããå¿
èŠããããŸãã ã€ãŸãã require("mocha/nodeable")
ã¯ãã€ã³ã¿ãŒãã§ã€ã¹ããšã¯ã¹ããŒãããã ãã§ãªããMochaãã€ã³ã¹ã¿ã³ã¹åããå¿
èŠããããŸãã次ã«ããã¹ããã¡ã€ã«ã®å®è¡åŸã«Mochaãå®è¡ããå¿
èŠããããŸããprocess.on("beforeExit"
ã§Mochaãå®è¡ããããšã§ããprocess.nextTick
ãŸãã¯setImmediate
ãŸãã¯setTimeout(..., 0 /* or some small number */)
ã§ãã--delay
ã䜿çšããŠèšå®ãã run()
ã䜿çšããŠéåæã§å®è¡ãããã¹ãã¯åé¡ã«ãªããŸãã ãã€å®è¡ããããç¥ãããã§ã¯ãªããããç°¡åã§ã run()
ãããŸãããŸãã --delay
ïŒä»¥äžãåç
§ããŸãã¯require("mocha/nodeable/delayed")
æäŸããïŒãå®è¡ãããã©ãããç¥ãããã§ããããŸããã run()
ã¯ãçŸåšèšèšãããŠãã1ã€ã®ãã¹ããã¡ã€ã«ã§ã®ã¿åŒã³åºãããããšã«ãªã£ãŠããŸãã ããããããã®èšèšã¯ãã§ã«æ±ãã«ããã®ã§ããšã«ãããã¹ãŠã®ãã¹ããã¡ã€ã«ã§run()
ãåŒã³åºãããããã«ä¿®æ£ããå¿
èŠããããŸãããã®å ŽåããããŒã察å¿ããã¹ãã§äœ¿çšããã®ã¯ç°¡åã§ãããããä¿®æ£ããŸãã ããã§ãªããã°...ç§ã¯äœããã¹ããããããªããnode
ã§ã¯ãªãmocha
ãä»ããŠãããã®ãã¹ããã¡ã€ã«ãåŒã³åºããããã«ãããå ŽåïŒã€ãŸããããã䜿çšããŠãnode
䜿çšã¯åŒ·å¶ãããŸããïŒã require
ã¯äœã§ãmocha.opts
ã䜿çšãããšãããŸãã¯ããŒã察å¿ã®ãã¹ããã¡ã€ã«ãMochaã®ããã©ã«ã以å€ã®åäœã䜿çšã§ããããã«ãããã®ã䜿çšãããšãã«ãMochaãã©ã°ã®åãæž¡ãããµããŒãããå Žåã¯ãCLIããŒã¹ãããã¢ãžã¥ãŒã«åããå¿
èŠããããŸããåäœãglobal
ãªããžã§ã¯ããã€ã³ã¿ãŒãã§ã€ã¹ã«æž¡ã代ããã«ããéžæãããã€ã³ã¿ãŒãã§ã€ã¹ãªããžã§ã¯ãããæž¡ããŸãã ïŒè¿œå ããããã«ç·šéïŒããã¯lib/mocha.js
ãšbrowser-entry.js
äž¡æ¹ã§å®è¡ããå¿
èŠããããŸããç§ãç¥ãéããææ¡ã®ãã¹ãŠã®ã°ããŒãã«é¢é£éšåã¯ããŒããšãã©ãŠã¶ãŒã®äž¡æ¹ã§å®è¡å¯èœã§ãã ïŒglobal
ã³ããŒããŸããlocalInterface
ãªãã·ã§ã³ïŒCLIã§ã¯--local-interface
ïŒã¯ãMochaãéžæããã€ã³ã¿ãŒãã§ã€ã¹ãªããžã§ã¯ãããglobal
ã³ããŒããã®ãåæ¢ããŸããrequire("mocha").it
ãšã®äžäœäºææ§ã®ããã«ãMochaã¯éžæããã€ã³ã¿ãŒãã§ã€ã¹ãªããžã§ã¯ãããMocha
ã«ãTDD / BDDé¢æ°ãã³ããŒããŸãããããã¯åŸã§éæšå¥š/åé€ãããŸããrequire("mocha/interface")
ã¯ãéžæããã€ã³ã¿ãŒãã§ã€ã¹ãªããžã§ã¯ãããšã¯ã¹ããŒãããŸããrequire("mocha/interface/<specific interface>")
ã¯ãæ°ããéžæãããã€ã³ã¿ãŒãã§ã€ã¹ãªããžã§ã¯ãã䜿çšããŠæå®ãããã€ã³ã¿ãŒãã§ã€ã¹ãåŒã³åºããåŸã§ãšã¯ã¹ããŒãããŸããrequire("mocha/interface")
ã¯ããã©ãŠã¶ã®mocha
ãªããžã§ã¯ãmocha.interface
ããããã£ã«ããªããã¢ãžã¥ãŒã«ã·ã¹ãã ãªãã§ã®ãã©ãŠã¶ã®äœ¿çšããµããŒãããŸããrequire("mocha/nodeable/<specific interface>")
ã¯ãMochaãã€ã³ã¹ã¿ã³ã¹åãããã¹ããã¡ã€ã«ã®åŸã«å®è¡ããããã«Mochaãèšå®ããŸãïŒ delay
ã䜿çšãããŠããªãéããããããsetTimeout
䜿çšããŸããäžèšã®delay
ïŒã require("mocha/interface/<specific interface>")
ããã«ããã®ã€ã³ã¿ãŒãã§ã€ã¹çšã«éžæããã€ã³ã¿ãŒãã§ã€ã¹ãªããžã§ã¯ãããšã¯ã¹ããŒãããŸãmocha.opts
ããµããŒããããŠããå Žåã require("mocha/nodeable")
ã¯Mochaãã€ã³ã¹ã¿ã³ã¹åãããã¹ããã¡ã€ã«ã®åŸã«å®è¡ããããã«Mochaãã»ããã¢ãããïŒäžèšãåç
§ïŒãCLIãšåãã€ã³ã¿ãŒãã§ã€ã¹ã»ããã¢ããæé ãå®è¡ããŠã require("mocha/interface")
ããã«éžæãããã€ã³ã¿ãŒãã§ã€ã¹ãªããžã§ã¯ããmocha
察å¿ã«ãããå Žåã¯ã mocha/nodeable
ãšmocha/nodeable/<specific interface>
ã¯å¿
èŠãããŸãããããŒã察å¿ãmocha/interface
䟿ä¹ãããããšãã§ããŸãã mocha/interface/<specific interface>
ãèãïŒ
å®éãããã«èããŠã mocha <test file>
代ããã«node <test file>
ã䜿çšããªããšãã次ã®çç±ã§ããã®ãã±ãããéããããã«åè°ããŸãã
mocha.opts
ã°ããã«é¢ä¿ãªããåäžã®ãã¹ããã¡ã€ã«ã®ã¿ãå®è¡ããããšã§ãã ç°¡åãªè§£æ±ºçïŒä»£ããã«package.json
ã®test
ã¹ã¯ãªããã«ã°ãããé
眮ããŸãïŒ npm test
ã¯ããããã¹ãŠãå®è¡ãã mocha
ïŒ node_modules/.bin/mocha
ã npx mocha
ïŒã¯ãæå®ããããã¹ããã¡ã€ã«ã®ã¿ãå®è¡ããŸãã ïŒå®è¡ããããã¹ããã¡ã€ã«ã®æ°ã«é¢ä¿ãªããä»»æã®ãã¹ãå®è¡ã§å®è¡ããå¿
èŠããããã¡ã€ã«ãŸãã¯ã°ããã¯ãåŒãç¶ãmocha.opts
ãŸããïŒmocha.opts
å®å
šã«ãã€ãã¹ã§ããããã«ããããšã§ãã ããã¯ã mocha --opts /dev/null
ïŒãŸãã¯Windowsã§ã¯mocha --opts nul
ïŒã䜿çšããŠå®çŸã§ããã¯ãã§ãã äœããã®çç±ã§ããã§ãªãå Žåã¯ãCLIãã©ã°ãå®è£
ããŠmocha.opts
åŠçãã¹ãããããæ¹ãç°¡åã§ãã"mocha/nodeable"
代ããã«ãMochaã®ããã°ã©ããã£ãã¯APIã䜿çšããŠåãã³ãŒããæ¶ç©ºã®ããã±ãŒãž"nodeable-mocha"
å
¥ããã ãã§ããã³ã¢ã®å€éšãããã³ã¢ã§éæããããéèŠãªå©ç¹ãçºèŠããå Žåã¯ããã€ã§ãåéã§ããŸãã
ãã ãã次ã®çç±ãããåé¿ã°ããŒãã«ãã±ãããåéããããšãæ±ããŠããŸãã
describe
ã it
ãªã©ã®ååã®ã°ããŒãã«ã䜿çšããŠããä»ã®ã©ã€ãã©ãªã¯ããã€ãããŸããïŒïŒãååãšããŠå¯èœã§ãïŒãã®è³ªåãžã®åçã¯ãã£ãšå€§ããå¯èœæ§ããããŸãïŒ 0ãããå°ããã§ãããå°æ°ã§ãïŒ-ã°ããŒãã«åå空éã«ããŒã¿ããã³ãããªãããšã¯ãçè«çã«ã¯æ£ããããšã§ããã€ãŸããMochaãmocha
ã䜿çšããŠãã¹ããå®è¡ããæ¹æ³ãæäŸããŠãããã global
æ±æããªããã©ã°ã®èåŸã«ããããšã瀺åããŠããŸããïŒ
ã¢ã«ã¢ã«ãäœãçç±ã®äžéšãšãã®æåã®äžéšã¯ããã®ãã€ã³ããŒãããããã«å®åæãå¿ èŠãšããªãããšã§ãã ã°ããŒãã«åå空éãæ±æããããšã«é¢ããæ矩ã«ãããããããéçºè ã®äººéå·¥åŠã®ããã«ããããå®å šã«æ£åœãªçç±ããããŸãã
ã€ãŸããã¢ã«ã¯ã¢ã«ã䜿çšããŠãã¹ããå®è¡ããæ¹æ³ãæäŸããŸãããã°ããŒãã«ãæ±æããªããã©ã°ã®èåŸã«ããããšã瀺åããŠããŸããïŒ
ããã
ã¢ã«ã¢ã«ãäœãçç±ã®äžéšãšãã®æåã®äžéšã¯ããã®ãã€ã³ããŒãããããã«å®åæãå¿ èŠãšããªãããšã§ãã ã°ããŒãã«åå空éãæ±æããããšã«é¢ããæ矩ã«ãããããããéçºè ã®äººéå·¥åŠã®ããã«ããããå®å šã«æ£åœãªçç±ããããŸãã
ç§ã¯äžè¬çã«åæããªããšèšã£ãŠããããã§ã¯ãããŸãããããªããã€ã³æ©èœãšããŠãäžéšã®éçºè
ãã°ããŒãã«ã§ã¯ãªãã€ã³ããŒããå¿
èŠãšããå¯èœæ§ãããå Žæã確èªã§ããŸãïŒããããã誀ã£ãŠåç
§ããã«ã¢ãžã¥ãŒã«ã«ããŒã«ã«å€æ°context
å¿
èŠããããŸãïŒåœŒããvar
ãå¿ããå Žåãã°ããŒãã«ã«ããããããã®çš®ã®è¡çªãããã«èµ·ããããããµãŒãããŒãã£ã®ã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããããšæãã§ãããïŒããããŠä»ç§ã¯ãããæ£ããè¡ãæ¹æ³ãç解ããŸããã¢ããªã³ããã€ãã®äžŠã¹æ¿ãã®ããã«ããã¢ã«ã§è¡ãããšãç°¡åã«ïŒç§ã¯ä»ã®äœãã«åžã蟌ãŸååŸããªãå Žåãå®éã«ã¯ãç§ã¯ãããã蚌æããããã«ä»é±ã®ãã©ã³ãã§ã©ãæ¡ãäžç·ã«ã¹ããŒãããŸãïŒã
ïŒããã«ãã€ã³ã¿ãŒãã§ã€ã¹ãã°ããŒãã«ã«èšå®ãããåŸã Mocha
ãªããžã§ã¯ãã«ã³ããŒãããã®ã§ã require("mocha").it
ãã§ããããã«ãç§ãã¡ã¯ãã§ã«ã¡ãã£ãšããè©Šã¿ãäžè²«æ§ããªãããã°ãçºçãããããå®éã«ã¯ã°ããŒãã«åå空éã®æ±æãåé¿ããããšããã§ããŸããããã®ãããªæ©èœãç¶æããå Žåã¯ãçãããããŒãžã§ã³ãç¶æããã®ã§ã¯ãªããä¿®æ£ããããšãã§ã
ããã¯IMOã§ãããMochaãã¹ãã§node <test file>
ãå®è¡ã§ããã®ãšã¯å¯Ÿç
§çã§ããããã¯ãç§ãç¥ãéããå©ç¹ããªããMochaã®å
å€ã§åæ§ã«å®è£
ããã®ãé£ããã§ãããã
@stevenvachon
const {describe, it} = require('mocha')
ãæ©èœããªãã®ã¯ãªãã§ããïŒ æªå®çŸ©ã«ãªããŸãã...
$ node -v
v8.4.0
@zapphyreããªãã¯ãŸã ä»ããŠãã¹ãã¹ã€ãŒããå®è¡ããå¿
èŠããããŸãmocha
ãŸããçµç±ã§ãããã°ã©ã node
ã
node
ã§è€æ°ã®ãœãŒã¹ãã¡ã€ã«ãå®è¡ããããšã¯ã§ããªãããã mocha
ã¹ã¿ãã¯ããŸãã ç¬èªã®å®è¡å¯èœãã¡ã€ã«ãæããªããã¹ãã©ã³ããŒ/ãã¬ãŒã ã¯ãŒã¯ãç¥ããŸããã
ããå ·äœçã«åé¡ã®ã¿ã€ãã«ãæŽæ°ããŸãã
ããã®å¥ã®çç±ïŒ low.jsãªã©ã®å¥ã®JSã©ã³ã¿ã€ã ã䜿çšããŠãã¹ããå®è¡ããããšæããŸãïŒããã¯ãã©ãããã©ãŒã ã®1ã€ã§ãããããä»ã¯node.jsããã©ãŠã¶ãŒãããã³React Nativeã§ãïŒã ã¢ã«ãã€ã³ããŒãããŠãã¹ããå®è¡ããJSãã¡ã€ã«ãããå Žåã¯ãããå®è¡ã§ããŸããããã¹ããå®è¡ããããã«mocha
ãåŒã³åºãå¿
èŠãããå Žåã¯å®è¡ã§ããŸããã
ã€ãŸããããªãã¯ãã§ã«ãã©ãŠã¶ã®ããã«ãããããŠããã®ã§ãã ãã®ãã©ãããã©ãŒã ã«ã¯ããmochaããã€ã³ããŒããã mocha.run()
ã䜿çšããŠã°ããŒãã«mocha
ãªããžã§ã¯ããããã¹ããå®è¡ããJSã³ãŒãããããŸãã
ãã©ãŠã¶ã§ç§ã¯
mocha
ãªããžã§ã¯ããååŸããŸãmocha.setup({ui: 'bdd'});
å®è¡ããŸã mocha.checkLeaks();
mocha.globals([]);
mocha.run();
以äžã§ãã node.jsã§åãããšãè©ŠããSystemJSã®ä»£ããã«requireã¹ããŒãã¡ã³ãã䜿çšããŠãã¹ããã¡ã€ã«ãããŒããããšã次ã®ããã«ãªããŸãïŒmocha 5.2.0ã䜿çšïŒ
> mocha.run();
TypeError: Cannot read property 'search' of undefined
at Mocha.mocha.run (/home/mha/one/node_modules/mocha/mocha.js:149:54)
ç·šéïŒ https ïŒ mocha.addFile
ãããŒãããã ãã§ãªããåãçµæãè©ŠããŸããã
çŸåšãdescribe / itãã€ã³ããŒãããæ¹æ³ã¯ãããŸããïŒ
æ°ããïŒçŸåš20æéåã®ïŒWikiããŒãžhttps://github.com/mochajs/mocha/wiki/Using-mocha-programmaticallyãããå®è¡ããããã®ãã®ã§ãã
ããã®å¥ã®çç±ïŒ low.jsãªã©ã®å¥ã®JSã©ã³ã¿ã€ã ã䜿çšããŠãã¹ããå®è¡ããããšæããŸãïŒããã¯ãã©ãããã©ãŒã ã®1ã€ã§ãããããä»ã¯node.jsããã©ãŠã¶ãŒãããã³React Nativeã§ãïŒã ã¢ã«ãã€ã³ããŒãããŠãã¹ããå®è¡ããJSãã¡ã€ã«ãããå Žåã¯ãããå®è¡ã§ããŸããããã¹ããå®è¡ããããã«
mocha
ãåŒã³åºãå¿ èŠãããå Žåã¯å®è¡ã§ããŸããã
代æ¿ã©ã³ã¿ã€ã ã«ããŒãã®ãããªå®è¡å¯èœãã¡ã€ã«ãããå ŽåïŒlow.jsã«ã¯ãããšæããŸããïŒïŒã alternative-executable ./node_modules/.bin/_mocha
å®è¡ã§ããããã¯æ©èœããã¯ãã§ãã
ç¬èªã®å®è¡å¯èœãã¡ã€ã«ãæããªããã¹ãã©ã³ããŒ/ãã¬ãŒã ã¯ãŒã¯ãç¥ããŸããã
https://github.com/tapjs/node-tap/#tutti -i-gusti-sono-gusti
https://github.com/mochajs/mocha/issues/3006ã解決ãããã®ã§ããã©ãŠã¶ãŒã«åãååã®ãšã¯ã¹ããŒãããããšäŸ¿å©ã§ãã
çŸåšã以äžãæ©èœããŠããŸãã
<script type="module">
import './node_modules/mocha/mocha.js'
console.log(mocha)
</script>
ãããã以äžã¯ããã§ã¯ãããŸããïŒ
<script type="module">
import { mocha } from './node_modules/mocha/mocha.js'
console.log(mocha)
</script>
ïŒhttps://github.com/mochajs/mocha/issues/956#issuecomment-167453800ã«ãã£ãŠèŠæ±ããããšããïŒ
ããã¯ããã©ã³ããããŒã«ã¢ãããšããŒãžããŠãã©ã³ã¹ãã€ã©ãŒãã»ããã¢ãããããšç°¡åã«ãªãå¯èœæ§ããããŸãã esmãã³ãã«ãšãesmã³ãŒããã¹ãæ¶è²»ããŠã°ããŒãã«ãªãŒã¯ãè¿œå ããã¬ã¬ã·ãŒãã³ãã«ãçšæããããšã¯å¯èœãšæãããŸãã ãã©ãŠã¶ãšããŒãã®äž¡æ¹ã§å£ãããã³ãŒããèšè¿°ãããããªãããã«ãæ°ããè¿œå ãããã³ãŒããã¹ãšãã³ãã«ã®ã¿ãå€æŽããããã«çŽ°å¿ã®æ³šæãæãå¿ èŠããããŸãã
ã°ããŒãã«å€æ°ãšã¿ã€ãã³ã°ã䜿çšãããšãããã¯ã¢ã«ãã¬ã¬ã·ãŒãªãã®ã«ããŸãã
ãšããã§ãã°ããŒãã«ãªãã§@types/mocha
ãäœæããŸããïŒ https ïŒ
ãããïŒã°ããŒãã«ïŒããŸããªãæ£åŒã«åé€ãããããšãé¡ã£ãŠããŸãã
æãåèã«ãªãã³ã¡ã³ã
+1ã®å ŽåïŒ
import { describe, before, it } from 'mocha';