@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....
์๋ฌด๋ ๊ทธ๊ฒ์ ์ฌ์ฉํ์ง ์์ ๊ฒ์ด์ง๋ง ์ ์ด๋ ํ์ฌ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ๊ตฌํํ๋ ๋ ๊นจ๋ํ ๋ฐฉ๋ฒ์ด ๋ ๊ฒ์ ๋๋ค. ๋ชจ๋ ์ฌ๋์ด ๋งค๋ฒ ์ค์ ํด์ผํ๋ _ton_์ ์์ฉ๊ตฌ๊ฐ์์ ๊ฒ์ ๋๋ค.ํ์ง๋ง CLI-ish API๋ก ๋ฒ์๋ฅผ ์ขํ ์ ์๋ค๋ฉด ๊ด์ฐฎ์ ๊ฒ์ ๋๋ค. ARGV์ ๋ฐฉ๊ธ ์ ๋ฌํ lib / cli.js๊ฐ ์์์ง๋ง ์ฌ์ ํ ๋๊ตฐ๊ฐ ์ฌ์ฉํ ๊ฒ ๊ฐ์ง๋ ์์ง๋ง CLI ์์ด๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์ง๋ง, ์ด๋ ์๋ฌด๋ ์ค์ ๋ก ์ผ๋ถ ์ฃ์ง ์ผ์ด์ค๋ฅผ ๋์ด์๊ณ ์ถ์ดํ์ง ์์์ ๋ณด์ฌ์ค๋๋ค.
@visionmedia ๊ฝค ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ๋ด๊ฐ require("mocha/bdd")
๋๋ ์ด์ ์ ์ฌํ ๊ฒ์ ์ ์ํ ์ด์ ๋ ๊ธฐ์กด์ Mocha ์ธก๋ฉด์์ ๊ตฌํํ๊ธฐ๊ฐ ๋งค์ฐ ์ฌ์ธ ๊ฒ์ด์ง๋ง ๋ค, ์๋ง๋ ๋น์ ์ ๊ฒ์ด ๋ ์ข์ ๊ฒ์
๋๋ค. (์๋ฅผ ๋ค์ด ํ ๋ฒ์ ์ฌ๋ฌ ํ
์คํธ ์ค์ํธ๋ฅผ ์คํํ๋ ๋ฐ ์ฌ์ฉํ๋ ๊ฒ์ ์์ํ ์ ์์ต๋๋ค. ๊ธ์์, ์๋ง๋ process.on ( 'uncaughtException') ์ฌ์ฉ์ผ๋ก ์ธํด ๊นจ์ง ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ์ ๊ฐ ์๋ฏธํ๋ ๋ฐ๋ฅผ ์ ์ ์์ต๋๋ค.)
์ธ์ ๊ฐ๋ ํ ๋ฆฌํ์คํธ๋ฅผ ์๋ ํ ์ ์์ต๋๋ค.
์ด๊ฒ์ Destructuring Assignment๋ฅผ ํตํ ์ฝ๊ฐ์ ๋ฏธ๋ 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
๊ทธ๋ฆฌ๊ณ ๊ทธ ํ ์คํธ๋ฅผ ์คํ ํ์ต๋๊น?
ํธ์ ๋ด์ ๊ฐ๊ธฐ
nodespec์์ ์ง์ ์ด ์์ ์ ์๋ํ์ง๋ง ๋ฌธ์ ๋ ์ค์ ๋ก ๋ค์ํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์์๊ฒํ๋ ๊ฒ์ด ์๋ ์์ต๋๋ค. ๋ฌธ์ ๋ ์คํ์ ์์ํ๋ ๋ฐฉ๋ฒ /์๊ธฐ๋ฅผ ํ์ ํ๋ ๊ฒ์ด ์์ต๋๋ค. ์ฌ์ ํ 2 ๋จ๊ณ ์ ์ / ์คํ ์ ๊ทผ ๋ฐฉ์์ด ํ์ํ์ต๋๋ค.
๋ด๊ฐ ์๊ฐ ํด๋ธ ์ต์
์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1) ๋ชจ๋ ์ฌ์ฉ์๊ฐ ๊ฒฉ๋ฆฌํ์ฌ ์คํํ๋ ค๋ ๋ชจ๋ ํ์ผ์ ๋งจ ์๋์ mocha.exec ()์ ๊ฐ์ ๊ฒ์ ์ถ๊ฐํ๋๋กํฉ๋๋ค.
2) core๊ฐ process.on ( 'exit')์ ๊ฐ์ ๊ฒ์ ์ถ๊ฐ ํ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฒคํธ ๋ฃจํ๊ฐ ์ฌ์ ํ ์ฌ์ฉ ๊ฐ๋ฅํ ๋
3) ๊ฐ ํ์ผ์ ํ๋์ ์ต์์ ๊ธฐ์ ๋ธ๋ก ๋ง ์๋ค๊ณ ๊ฐ์ ํ๊ณ ์๋ฃ๋๋ฉด ์คํ์ ์์ํฉ๋๋ค.
(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์ ๋๋ฃ๋ค์ด ๋ชจ์นด์์ ํ
์ดํ ๋ฐ ํญ๊ณผ ๊ฐ์ ํ๋ค์ค๋ก ์ด๋ํ๋ ์ฃผ๋ ์ด์ ์ค ํ๋์์ต๋๋ค. ๊ฐ์ธ์ ์ผ๋ก ์ ๋ ๋ชจ์นด๋ฅผ ๊ณ ์ํ๊ณ ์ถ์ง๋ง "๋
ธ๋ ๋ฅ๋ ฅ"์ด๋ผ๋ ์ฃผ์ฅ์ด ๋ค์ ์ค๋๋ ฅ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํธ์ง : "node-ability"์ธ์๋ @tmcw here์ ์ํด ์ ๊ตํ ๋์์ต๋๋ค .
๋ช
ํ์ฑ์ ์ํด require
๊ฐ๋ฅ ์ธํฐํ์ด์ค๊ฐ ์๋ค๋ ๊ฒ์ ์ฌ์ฉ์ ๊ด์ ์์ ๋ณผ ๋ ์ฃผ์ ์ฐจ๋จ ์์ธ์ด ์๋๋๋ค. ๋ค์์ ์ด๋ฏธ ์๋ํ๋๋ก ๋ฌธ์ํ๋์ด ์์ต๋๋ค.
var describe = require('mocha').describe;
var before = require('mocha').before;
var it = require('mocha').it;
ES6์์๋ ๋ ์ข์์ง๋๋ค.
import { describe, before, it } from 'mocha';
๋ฌธ์ ๋ ์ด๊ฒ์ด 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
๋๊ตฌ๋ ์ง ์ ์ ์ฌํญ์ด ์์ผ๋ฉด ์๋ ค์ฃผ์ญ์์ค.
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
๋ฅผ ํตํด ํ
์คํธ ํ์ผ์ ์คํํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ชจ์นด๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ฌ๋๋ค์ ๋จ์ํ ๋ชจ์นด๋ฅผ ์ข์ํ์ง ์๊ณ ๋ณ๋ช
์ ์ฐพ๊ณ ์๋ ์ฌ๋๋ค์ด๋ผ๋ ๋๋์ด ๋ค์์ต๋๋ค! ๋ชจ์นด๊ฐ ๋ชจ๋ ์ฌ๋์์ํ ๊ฒ์ ์๋๋๋ค.
์ฌ๊ธฐ๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค. jspm ๋ฐ SystemJS๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ๋ธ๋ผ์ฐ์ ์์ ์คํ์ค์ธ ํ
์คํธ์์ import
Mocha๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
import { describe, before, it } from 'mocha';
๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉํ ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
@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 ํ
์คํธ๋ฅผ ์คํํ ์์๋ ๋ฅ๋ ฅ์
๋๋ค. ๊ทธ๊ฒ์ด์ด ๋ฌธ์ ์ ๊ดํ ๊ฒ์
๋๋ค.
์ํ๊น๊ฒ๋ ํ ์ฌ์ค ํฌ๊ธฐ์ ๊ผฌ๊ธฐ ๊ณต์ ์๋ฌด๋ ํ์ง ๋ชปํ๋ ์๊ฐ์ด๋ ์๋์ง๊ฐ ์์์ต๋๋ค.์ด ๋ฌธ์ ์ ๋์ด๊ฐ๋๋ฉด ๋ถ๋ช ํด์ง๋๋ค ...
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>"
์ ํผ๋ํ์ง ๋ง์ญ์์ค. ๋ผ์ด๋ธ ๊ตฌํ).node test/someFile.js
๋์ mocha 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 */)
์์ Mocha๋ฅผ ์คํํ๋ ๊ฒ์
๋๋ค.--delay
ํ๊ณ run()
๋น๋๊ธฐ ์ ์ผ๋ก ์คํํ๋ ํ
์คํธ๋ ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค. ์คํ์๊ธฐ๋ฅผ ์๊ธฐ์ํ ๊ฒ์ด ์๋๋ผ run()
๊ฐ ์์ต๋๋ค. --delay
(์๋ ์ฐธ์กฐ ๋๋ require("mocha/nodeable/delayed")
) ์ฌ๋ถ๋ฅผ ์๊ธฐ ์ํด์๋ ์๋๋๋ค. run()
๋ ํ์ฌ ์ค๊ณ๋๋๋ก ํ๋์ ํ
์คํธ ํ์ผ์์๋ง ํธ์ถ๋์ด์ผํฉ๋๋ค. ์๋ง๋ ๋์์ธ์ ์ด๋ฏธ ์์
ํ๊ธฐ ์ด๋ ต๊ณ ์ด์จ๋ ๋ชจ๋ ํ
์คํธ ํ์ผ์์ run()
๊ฐ ํธ์ถ๋๋๋ก ์์ ํด์ผํฉ๋๋ค.์ด ๊ฒฝ์ฐ "๋
ธ๋ ๊ฐ๋ฅ"ํ
์คํธ์ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ด ์ฝ์ต๋๋ค. ๊ทธ๊ฒ์ ๊ณ ์ณ๋ผ. ๊ทธ๋ ์ง ์์ผ๋ฉด ... ์ด๋ป๊ฒํด์ผํ ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.node
๋์ mocha
๋ฅผ ํตํด ์ด๋ฌํ ํ
์คํธ ํ์ผ์ ํธ์ถ ํ ์ ์๋๋กํ๋ ค๋ฉด (์ฆ, node
๊ฐ์ ๋ก ์ฌ์ฉํ์ง ์์) require
d๋ CLI๊ฐ ์ฌ์ฉ ์ค์ผ ๋ ๊ฐ์งํด์ผํ๋ฉฐ Mocha๋ฅผ ์ธ์คํด์คํํ์ง ์์์ผํฉ๋๋ค. ์ด๊ฒ์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์ API๊ฐ ์ฌ์ฉ์ค์ธ์๊ธฐ๋ฅผ ๊ฐ์งํ๋ ๊ฒ๋ณด๋ค ์ฌ์ธ ๊ฒ์
๋๋ค. CLI๋ ์ด๋ฌํ ๋ชจ๋์ด ํ์ธํ ์ ์ญ ์ํ๋ฅผ ์ค์ ํ๊ฑฐ๋ ์ด๋ฌํ ๋ชจ๋์ด CLI๊ฐ Node๊ฐ ์คํ ํ ํ์ผ์ธ์ง ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.mocha.opts
์ฌ์ฉํ ๋ Mocha ํ๋๊ทธ ์ ๋ฌ์ ์ง์ํ๊ฑฐ๋ ๋
ธ๋ ๊ฐ๋ฅ ํ
์คํธ ํ์ผ์ด Mocha์ ๊ธฐ๋ณธ๊ฐ ์ด์ธ์ ๋์์ ์ฌ์ฉํ๋๋ก ํ์ฉํ๋ ๋ชจ๋ ๊ฒ์ ์ง์ํ๋ ค๋ฉด CLI ์กฐ๊ฐ์ ๋ ๋ชจ๋ํํด์ผํฉ๋๋ค. ํ๋.global
๊ฐ์ฒด๋ฅผ ์ ๋ฌํ์ฌ ํจ์๋ฅผ ๋ฐฐ์นํ๋ ๋์ "์ ํ๋ ์ธํฐํ์ด์ค ๊ฐ์ฒด"๋ฅผ ์ ๋ฌํฉ๋๋ค. (์ถ๊ฐํ๊ธฐ ์ํด ํธ์ง ๋จ :์ด ์์
์ lib/mocha.js
๋ฐ browser-entry.js
๋ชจ๋์์ ์ํ๋์ด์ผํฉ๋๋ค. ์ ์์ ๋ชจ๋ ๊ธ๋ก๋ฒ ๊ด๋ จ ๋ถ๋ถ์ด ๋
ธ๋์ ๋ธ๋ผ์ฐ์ ๋ชจ๋์์ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. )global
๋ณต์ฌํฉ๋๋ค.localInterface
์ต์
(CLI์ --local-interface
)์ Mocha๊ฐ ์ ํํ ์ธํฐํ์ด์ค ๊ฐ์ฒด์์ global
๋ณต์ฌํ๋ ๊ฒ์ ์ค์งํฉ๋๋ค.require("mocha").it
์์ ํ์ ํธํ์ฑ์ ์ํด Mocha๋ ์ ํํ ์ธํฐํ์ด์ค ๊ฐ์ฒด์ TDD / BDD ํจ์๋ Mocha
๋ก ๋ณต์ฌํ์ง๋ง ๋์ค์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๊ฑฐ๋ ์ ๊ฑฐ๋ฉ๋๋ค.require("mocha/interface")
๋ ์ ํํ ์ธํฐํ์ด์ค ๊ฐ์ฒด๋ฅผ ๋ด ๋ณด๋
๋๋ค.require("mocha/interface/<specific interface>")
๋ ์ดํ์ ๋ด๋ณด๋ผ ์๋ก ์ ํ๋ ์ธํฐํ์ด์ค ๊ฐ์ฒด๋ก ์ง์ ๋ ์ธํฐํ์ด์ค๋ฅผ ํธ์ถํฉ๋๋ค.require("mocha/interface")
๋ ๋ํ ๋ชจ๋ ์์คํ
์์ด ๋ธ๋ผ์ฐ์ ์ฌ์ฉ์ ์ง์ํ๊ธฐ ์ํด ๋ธ๋ผ์ฐ์ ์ mocha
๊ฐ์ฒด์ ๋ํ ์์ฑ์ด๋ฉ๋๋ค. mocha.interface
.require("mocha/nodeable/<specific interface>")
๋ชจ์นด ํ
์คํธ ํ์ผ ํ ์คํํ ๋ชจ์นด ์ค์ ์ธ์คํด์คํ (์๋ง๋ ์ฌ์ฉํ์ฌ setTimeout
์๋ delay
์ฌ์ฉํ๊ณ , ๋ค์ ์๊ธฐ ์ฐธ์กฐ. delay
) ๋ฐ require("mocha/interface/<specific interface>")
์ ๊ฐ์ด ํด๋น ์ธํฐํ์ด์ค์ ๋ํด ์ ํํ ์ธํฐํ์ด์ค ๊ฐ์ฒด๋ฅผ ๋ด ๋ณด๋
๋๋ค.mocha.opts
๊ฐ ์ง์๋๋ ๊ฒฝ์ฐ require("mocha/nodeable")
๋ Mocha๋ฅผ ์ธ์คํด์คํํ๊ณ ํ
์คํธ ํ์ผ ์ดํ์ ์คํ๋๋๋ก Mocha๋ฅผ ์ค์ (์ ์ฐธ์กฐ)ํ๊ณ CLI์ ๋์ผํ ์ธํฐํ์ด์ค ์ค์ ๋จ๊ณ๋ฅผ ์ํํ์ฌ require("mocha/interface")
์ฒ๋ผ ์ ํ๋ ์ธํฐํ์ด์ค ๊ฐ์ฒด.mocha
-able์ด๋๋๋กํ๋ ค๋ฉด mocha/nodeable
& mocha/nodeable/<specific interface>
๊ฐ ํ์ํ์ง ์์ต๋๋ค. mocha/interface
๋ฐ mocha/interface/<specific interface>
์๊ฐ?
์ฌ์ค, ๋ ๊น์ด ์๊ฐํด ๋ณด๋ฉด mocha <test file>
๋์ node <test file>
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ํ ๋ค์๊ณผ ๊ฐ์ ๊ทผ๊ฑฐ์ ๋ฐ๋ผ์ด ํฐ์ผ์ ์ข
๋ฃ ํ ๊ฒ์ ์ ์ํฉ๋๋ค.
mocha.opts
์์๋ glob์ ๊ด๊ณ์์ด ๋จ์ผ ํ
์คํธ ํ์ผ ๋ง ์คํํ๋ค๋ ๊ฒ์
๋๋ค. ๊ฐ๋จํ ํด๊ฒฐ์ฑ
: test
์คํฌ๋ฆฝํธ์ package.json
๋์ glob์ ๋ฃ์ผ์ญ์์ค. npm test
๋ ๋ชจ๋๋ฅผ ์คํํ๊ณ mocha
( node_modules/.bin/mocha
, npx mocha
)๋ ์ง์ ๋ ํ
์คํธ ํ์ผ ๋ง ์คํํฉ๋๋ค. (์คํ๋๋ ํ
์คํธ ํ์ผ ์์ ๊ด๊ณ์์ด ๋ชจ๋ ํ
์คํธ ์คํ์ ์ํด ์คํํด์ผํ๋ ํ์ผ ๋๋ glob์ ์ฌ์ ํ mocha.opts
์ ์์ด์ผํฉ๋๋ค.)mocha.opts
์์ ํ ์ฐํ ํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. ์ด์ mocha --opts /dev/null
(๋๋ Windows mocha --opts nul
)๋ฅผ ์ฌ์ฉํ์ฌ์ด ์์
์ ์ํ ํ ์ ์์ต๋๋ค. ์ด๋ค ์ด์ ๋ก ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ mocha.opts
์ฒ๋ฆฌ๋ฅผ ๊ฑด๋ ๋ฐ๋๋ก CLI ํ๋๊ทธ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ๋ ๊ฐ๋จํฉ๋๋ค."mocha/nodeable"
๋์ Mocha์ ํ๋ก๊ทธ๋๋ฐ API๋ฅผ ์ฌ์ฉํ์ฌ ๋์ผํ ์ฝ๋๋ฅผ ๊ฐ์ ํจํค์ง "nodeable-mocha"
๋ฃ์ผ์ญ์์ค.์ธ๋ถ๋ณด๋ค ํต์ฌ์์ ๋ฌ์ฑํ๊ธฐ ์ฌ์ด ์ค์ํ ์ด์ ์ ๋ฐ๊ฒฌํ๋ฉด ์ธ์ ๋ ์ง ๋ค์ ์ด ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก ํํผ ์ ์ญ ํฐ์ผ์ ๋ค์ ์ด๋๋ก ๋์ํฉ๋๋ค.
describe
, it
๋ฑ์ ์ ์ญ์ ์ฌ์ฉํ๋ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ช ๊ฐ์
๋๊น?) ์์น์ ์ผ๋ก ๊ฐ๋ฅํฉ๋๋ค (ํด๋น ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ด ๋ ํด ์ ์์). 0๋ณด๋ค ์ ์ ์)-์ด๋ก ์ ์ผ๋ก ๊ธ๋ก๋ฒ ๋ค์ ์คํ์ด์ค์ ๋ฌผ๊ฑด์ ๋ฒ๋ฆฌ์ง ์๋ ๊ฒ์ด ์ฌ๋ฐ๋ฅธ ์ผ์
๋๋ค.๊ทธ๋์ ๋น์ ์ Mocha๊ฐ mocha
ํ
์คํธ๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง๋ง global
์ค์ผ์ํค์ง ์๋ ํ๋๊ทธ ๋ค์ ์๋ค๊ณ ์ ์ํ๋ ๊ฒ์
๋๊น?
๋ชจ์นด ๋ชจ์นด๋ฅผ ๋ง๋๋ ๊ฒ์ ์ผ๋ถ์ ๊ทธ ์ฑ๊ณต์ ์ผ๋ถ๋ ๋ฌผ๊ฑด์ ๊ฐ์ ธ ์ค๊ธฐ ์ํด ์์ฉ๊ตฌ๊ฐ ํ์ํ์ง ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ธ๋ก๋ฒ ๋ค์ ์คํ์ด์ค๋ฅผ ์ค์ผ์ํค๋ ๊ต๋ฆฌ์๋ ๋ถ๊ตฌํ๊ณ ๊ฐ๋ฐ์ ์ธ์ฒด ๊ณตํ์ ์ํด ๊ทธ๋ ๊ฒํด์ผํ๋ ์์ ํ ํ๋นํ ์ด์ ๊ฐ ์์ต๋๋ค.
๊ทธ๋์ ๋น์ ์ ์คํ๋ ค Mocha๊ฐ mocha๋ก ํ ์คํธ๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง๋ง ๊ธ๋ก๋ฒ์ ์ค์ผ์ํค์ง ์๋ ํ๋๊ทธ ๋ค์ ์๋ค๊ณ ์ ์ํ๊ณ ์์ต๋๊น?
์.
๋ชจ์นด ๋ชจ์นด๋ฅผ ๋ง๋๋ ๊ฒ์ ์ผ๋ถ์ ๊ทธ ์ฑ๊ณต์ ์ผ๋ถ๋ ๋ฌผ๊ฑด์ ๊ฐ์ ธ ์ค๊ธฐ ์ํด ์์ฉ๊ตฌ๊ฐ ํ์ํ์ง ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ธ๋ก๋ฒ ๋ค์ ์คํ์ด์ค๋ฅผ ์ค์ผ์ํค๋ ๊ต๋ฆฌ์๋ ๋ถ๊ตฌํ๊ณ ๊ฐ๋ฐ์ ์ธ์ฒด ๊ณตํ์ ์ํด ๊ทธ๋ ๊ฒํด์ผํ๋ ์์ ํ ํ๋นํ ์ด์ ๊ฐ ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋์ํ์ง ์๋๋ค๋ ๋ง์ ์๋์ง๋ง ์ตํธ ์ธ ๊ธฐ๋ฅ ์ผ๋ก ์ผ๋ถ ๊ฐ๋ฐ์๊ฐ ์ ์ญ ๋์ ๊ฐ์ ธ ์ค๊ธฐ๋ฅผ ์ํ๋ ์์น๋ฅผ ๋ณผ ์ ์์ต๋๋ค (์ค์๋ก ์ฐธ์กฐํ์ง ์๊ณ ๋ชจ๋์ ์ง์ญ ๋ณ์ context
์ด๋ฆ์ ์ง์ ํ๊ธฐ๋ฅผ ์ํ ์ ์์ต๋๋ค. var
์ ์์ด ๋ฒ๋ฆฌ๋ฉด ์ ์ธ๊ณ์ ์ถ๊ฐ ํ ์ ์์ต๋๋ค. ์๋ง๋ ์ด๋ฌํ ์ข
๋ฅ์ ์ถฉ๋์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋ ๋์ ํ์ฌ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒ์
๋๋ค.) ์ด์ ์ฌ๋ฐ๋ฅด๊ฒ ์ํํ๋ ๋ฐฉ๋ฒ์ ์์ ๋์ต๋๋ค. ๋ํ ์ฝ๊ฒ๋ณด๋ค์ผ๋ก ๋ชจ์นด์์ ํ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ด๋ค ์ข
๋ฅ์ (๋ด๊ฐ ๋ญ๊ฐ์ ๋นจ๋ ค๋์ง ์๋ ๊ฒฝ์ฐ ์ฌ์ค, ๋๋ ์๋ง ์
์ฆํ๊ธฐ ์ํด ์ด๋ฒ ์ฃผ์ ํจ๊ป ๋ถ๊ธฐ์์ ์ด์์ ๋์ง๊ฑฐ์ผ).
(๋ํ ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ผ์ข
์ ์๋ฅด ํ ์๋๋ฅผ Mocha
๊ฐ์ฒด์ ๋ณต์ฌ๋๋ฏ๋ก require("mocha").it
ํ ์ ์์ง๋ง ๋ฒ์ ์ ์ด๋ฏธ ์์ต๋๋ค. ์์งํ ์ ์ง ๊ด๋ฆฌ๋ ์ด์ํ๊ณ ์ผ๊ด์ฑ ์ด ์์ผ๋ฉฐ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์ฐ ๋ฉฐ ์ค์ ๋ก ์ ์ญ ๋ค์ ์คํ์ด์ค๋ฅผ ์ค์ผ์ํค๋ ๊ฒ์ ํผํ์ง๋ ์์ต๋๋ค. ์ด๋ฌํ ์ข
๋ฅ์ ๊ธฐ๋ฅ์ ์ ํ ์ ์งํ๋ ค๋ ๊ฒฝ์ฐ ๋ชจํธํ ๋ฒ์ ์ ์ ์งํ๋ ๊ฒ๋ณด๋ค ์์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.)
์ด๊ฒ์ Mocha ํ
์คํธ์ ๋ํด node <test file>
๋ฅผ ํ ์์๋ ๊ฒ๊ณผ๋ ๋์กฐ์ ์ผ๋ก IMO์
๋๋ค. ์ ๊ฐ ์๋ ํ ์ด๋ค ์ด์ ๋ ์์ผ๋ฉฐ Mocha ๋ด๋ถ ๋๋ ์ธ๋ถ์์ ๊ตฌํํ๊ธฐ๊ฐ ๋๊ฐ์ด ์ด๋ ค์ธ ๊ฒ์
๋๋ค.
๋ฟก ๋นต๋จ
์ const {describe, it} = require('mocha')
๊ฐ ์ ์๊ฒ ํจ๊ณผ๊ฐ ์์ต๋๊น? ๋ฐฉ๊ธ ์ ์๋์ง ์์์ต๋๋ค ...
$ node -v
v8.4.0
@zapphyre ์ฌ์ ํ node
์๋ mocha
ํ๋ก๊ทธ๋จ์ ํตํด ํ
์คํธ ์ค์ํธ๋ฅผ ์คํํด์ผํฉ๋๋ค.
node
์ฌ๋ฌ ์์ค ํ์ผ์ ์คํํ ์ ์์ผ๋ฏ๋ก mocha
๊ณ ์ฐฉ๋ฉ๋๋ค. ์์ฒด ์คํ ํ์ผ์ด์๋ ํ
์คํธ ์คํ๊ธฐ / ํ๋ ์ ์ํฌ๋ฅผ ๋ชจ๋ฆ
๋๋ค.
๋ ๊ตฌ์ฒด์ ์ผ๋ก ์ด์ ์ ๋ชฉ์ ์ ๋ฐ์ดํธํ์ต๋๋ค.
๋ ๋ค๋ฅธ ์ด์ : ๋ค๋ฅธ JS ๋ฐํ์ (์ : low.js )์ ์ฌ์ฉํ์ฌ ํ
์คํธ๋ฅผ ์คํํ๊ณ mocha
๋ฅผ ํธ์ถํด์ผ ํ ๋ ๊ทธ๋ ๊ฒ ํ ์ ์์ต๋๋ค.
๋ด ๋ง์, ๋น์ ์ ์ด๋ฏธ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํด ๊ทธ๊ฒ์ํ๊ณ ์์ต๋๋ค. ์ด ํ๋ซํผ์๋ "mocha"๋ฅผ ๊ฐ์ ธ์จ ๋ค์ mocha.run()
์ฌ์ฉํ์ฌ ์ ์ญ mocha
๊ฐ์ฒด์์ ํ
์คํธ๋ฅผ ์คํํ๋ JS ์ฝ๋๊ฐ ์์ต๋๋ค.
๋ธ๋ผ์ฐ์ ์์ I
mocha
๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ต๋๋ค.mocha.setup({ui: 'bdd'});
mocha.checkLeaks();
mocha.globals([]);
mocha.run();
๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ ๋ค์ผ. ํ ์คํธ ํ์ผ์๋ก๋ํ๊ธฐ ์ํด SystemJS ๋์ require ๋ฌธ์ ์ฌ์ฉํ์ฌ node.js์์ ๋์ผํ ์์ ์ ์๋ํ๋ฉด (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://github.com/mochajs/mocha/wiki/Using-Mocha-programmatically ๋ฐ mocha.addFile
์๋ํ์ต๋๋ค.
ํ์ฌ ์ค๋ช / ๊ทธ๊ฒ์ ๊ฐ์ ธ ์ค๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
์๋ก์ด (ํ์ฌ 20 ์๊ฐ ์ ) Wiki ํ์ด์ง https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically ์์ง๋ง ํ ์คํธ๋ฅผ ์คํ ํ๊ธฐ์ํ ๊ฒ์ ๋๋ค.
๋ ๋ค๋ฅธ ์ด์ : ๋ค๋ฅธ JS ๋ฐํ์ (์ : low.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 ๋ฒ๋ค๊ณผ ๋ ๊ฑฐ์ ๋ฒ๋ค์ ๊ฐ๋ ๊ฒ์ด ๊ฐ๋ฅํด ๋ณด์ ๋๋ค. ์๋ก ์ถ๊ฐ ๋ ์ฝ๋ ๊ฒฝ๋ก์ ๋ฒ๋ค ๋ง ๋ณ๊ฒฝํ๋ ๋ฐ ๋ง์์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ์ผํ๋ฏ๋ก ๋ธ๋ผ์ฐ์ ์ ๋ ธ๋์์ ๋ชจ๋ ์์๋๊ฑฐ๋ ์ฝ๋ฉ๋์ง ์์ต๋๋ค.
์ ์ญ ๋ณ์์ ํ์ดํ์ ์ฌ์ฉํ๋ฉด ๋ชจ์นด ๋ ๊ฑฐ์๊ฐ๋ฉ๋๋ค.
Btw๊ฐ ์ ์ญ์์ด @types/mocha
์ ์์ฑํ์ต๋๋ค : https://github.com/whitecolor/mocha-types
๊ทธ๋ค์ด (๊ธ๋ก๋ฒ) ๊ณง ๊ณต์์ ์ผ๋ก ์ ๊ฑฐ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
+1 :
import { describe, before, it } from 'mocha';