ํ ์คํธ ํ์ผ ํจํด๊ณผ ์ผ์นํ๋ ํ์ผ ๋ง ํ ์คํธ ํ ์ ์๋๋ก ์ ์ธ ํจํด์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ํฉ๋๋ค. ์ด๋ ๊ฒํ๋ฉด ๋ฐ์ดํฐ ํ์ผ์ด ํฉ๋ฆฌ์ ์ธ ํจํด์ ๋ฐ๋ฅด๋ ํ ํ ์คํธ ํ์ผ๊ณผ ๊ณต์กด ํ ์ ์์ต๋๋ค.
๋๋ ์ด๊ฒ์ด ๋จ์ํ glob
ignore
์ต์
์ ์ค์ ํ๋ ์ต์
์ ์ ๊ณตํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์๊ฐ? ์ํ์ ๋ค๋ฉด ์ ๋ง ๋นจ๋ฆฌ PR์ ํ ์ ์์ต๋๋ค.
๋ ๊ฐ์ ๋ณ๋ ฌ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ข์ต๋๋ค. ํ๋๋ ํ
์คํธ ์ฉ์ด๊ณ ๋ค๋ฅธ ํ๋๋
๋ฐ์ดํฐ ํ์ผ ์ฉ. ๊ทธ๊ฒ ๋ด๊ฐ ํ ์ผ์
๋๋ค.
์ค์ 04.03.2015 15:52 schrieb "Kyle P Davis" [email protected] :
๋ค์์ ์ํ ํ ์ ์๋๋ก ์ ์ธ ํจํด์ ์ ๊ณตํ๊ณ ์ถ์ต๋๋ค.
๋ด ํ ์คํธ ํ์ผ ํจํด๊ณผ ์ผ์นํ๋ ํ ์คํธ ํ์ผ ๋ง. ์ด๊ฒ์ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํฉ๋๋ค
ํฉ๋ฆฌ์ ์ธ ์กฐ๊ฑด์ ๋ฐ๋ฅด๋ ํ ํ ์คํธ ํ์ผ๊ณผ ๊ณต์กดํ๋ ํ์ผ
๋ฌด๋ฌ.๋๋ ์ด๊ฒ์ด ๋จ์ํ ์ต์ ๋ฌด์ ์ต์ ์ ์ ๊ณตํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
glob์์.์๊ฐ? ์ํ์ ๋ค๋ฉด ์ ๋ง ๋นจ๋ฆฌ PR์ ํ ์ ์์ต๋๋ค.
โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/mochajs/mocha/issues/1577.
๋๋ (๊ณผ๊ฑฐ์) ํ ์ ์์์ง๋ง glob ignore๊ฐ ๋ฐ๋ก ๊ฑฐ๊ธฐ์ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ผ๋ฏ๋ก ๋ ์ด์ ๊ทธ๋ ๊ฒ ํ ํ์๊ฐ ์์ต๋๋ค.
glob ignore ์ต์ ์ ์ค์ ํ๊ธฐ ์ํด ๋ช ๋ น ์ค ์ธ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋งค์ฐ ์ฝ์ต๋๋ค. ๋๋ ๋จ์ง ์๊ฐ์ ์ป๊ณ ์กฐ๊ธ ๋จผ์ ๋ ผ์ํ๊ณ ์ถ์์ต๋๋ค.
์ด๊ฒ์ ๋ํ PR ์์ฑ์ ๋ํ ์ด์๊ฐ ์์ต๋๊น?
๋๋ ์ด๊ฒ ๋ง ํ์ํ๊ณ ๋ชจ์นด๊ฐ ์์ง ๊ฐ์ง๊ณ ์์ง ์์ ๊ฒ์๋ณด๊ณ ๋๋์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ํฐ ๋์์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ ์คํธ๋ฅผ ์ํด ํน๋ณํ ์ฌ์ฉํ๋ ํ ์คํธ ํด๋ ์์ "testApp"์ด ์์ต๋๋ค. mocha๊ฐ ํด๋น ํด๋ ๋ด์์ ํ ์คํธ๋ฅผ ์คํํ๋ ๊ฒ์ ์ํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ค๋ฅธ ๋ชจ๋ ํ ์คํธ ํ์ ํด๋๋ฅผ ๋ช ์ ์ ์ผ๋ก ํฌํจ ํ ํ์์์ด ํน์ ๊ฒฝ๋ก๋ฅผ ์ ์ธํ๊ธฐ ์ํด mocha.opts ํ์ผ์ ์ ์ธ๋ฅผ ์ถ๊ฐํ๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
testApp์ ์ฎ๊ธธ ์๋ ์์ง๋ง ์ค์ ๋ก ์ ์ฅ์์ ๋ค๋ฅธ ๊ณณ์ ๋ง์ง ์์ผ๋ฉฐ ํ ์คํธ ํด๋์ ํน์ ํ์ผ์ ๋ํ ์๋ ๊ฒฝ๋ก๊ฐ ์์ต๋๋ค.
์ด๊ฒ์ ์ข์ ์ถ๊ฐ๊ฐ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ์คํ ์ค์ํ์ง๋ ์์ง๋ง ๋์์ด๋ฉ๋๋ค.
ํธ์ ๋ด์ ๊ฐ๊ธฐ
์ด๊ฒ ํ์ํ๋ฉด ์๋ง ๊ทธ๋ฅ
$ mocha $(find test/ ! -path '*testApp*')
๊ทธ๋์ ์ ๋ ๊ทธ ์์ด๋์ด์ ๋ํด ์ ๋ง ํฅ๋ถ๋์ง ์์ต๋๋ค. ์ ๋ช
๋ น Makefile
, Gruntfile.js
, gulpfile.js
๋์ผํ ์์
์ ์ํ ํ ์ ์๊ธฐ ๋๋ฌธ์ recursive
ํ๋๊ทธ์ ์กด์ฌ์ ๋ํด์๋ ์ฝ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค gulpfile.js
๋ฑ
@boneskull ์ด ์ข์ ์ง์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ฒ์ ์ด๋ฏธ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋ฌ์ฑ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๋น์ ์ด ์ด๊ฒ์ ์์ ํ ํผํ๊ธฐ ์ํด ๋๋ ํ ๋ฆฌ๋ฅผ ๊ตฌ์กฐํ ํ ์ ์๋ค๋ ์ฌ์ค์ ํฌํจํ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๊ฐ ์์ต๋๋ค.
$ tree .
.
โโโ spec
โโโ fixtures
โโโ integration
โโโ unit
4 directories, 0 files
npm test
๋ฅผ ์คํํ ์ ์๋๋ก package.json์ ์
๋ฐ์ดํธํ๊ธฐ ๋งํ๋ฉด๋ฉ๋๋ค.
"scripts": {
"test": "mocha spec/unit spec/integration"
}
๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ก :
$ tree .
.
โโโ src
โโโ models
โโโ user.js
โโโ userSpec.js
2 directories, 2 files
@boneskull ์์ ์ ๋น์ทํ ๋ฐฉ์์ผ๋ก ์ฌ์์ ์คํํ ์ ์์ต๋๋ค ( Spec
ํฌํจํ๋ ํ์ผ ๋ง ์คํ๋ฉ๋๋ค).
"scripts": {
"test": "mocha $(find src -name '*Spec.js')"
}
ํธ์ง : ๊ณ ์ :)
@danielstjules ๋๋ ๊ทธ๊ฒ์ด ์ค์ ๋ก ์ด๋ฆ์ Spec
๋ก ๋ชจ๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์น ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. -name '*.spec.js'
๋ฅผ) ์ํ์ญ๋๊น?
๋ค, ๋ง์์! Brainfart. ์ง์ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์์ ์ ๋ํ ์์ ๋ ๋ช ๋ น :
"scripts": {
"test": "mocha $(find src -name '*Spec.js')"
}
์ด ๊ธฐ๋ฅ์ ๋ํ ์ ํจํ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์ฌ์ ํ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ธฐ๋ฅ๋ณ๋ก ํ์ผ์ ๊ทธ๋ฃนํํ๋ ๊ฒฝํฅ์ด ์์ผ๋ฏ๋ก ๊ฐ ํ
์คํธ ํ์ผ์ ํ
์คํธ์ค์ธ ๋
ผ๋ฆฌ๊ฐ ํฌํจ ๋ ํ์ผ ์์ ์์ต๋๋ค. ํ
์คํธ ํ์ผ ์ด๋ฆ ์ง์ ์ file
์ธ์ ๋๋ grep
์ต์
๊ณผ ํจ๊ป ์ผ๊ด๋๊ฒ ์๋ํ์ง๋ง node_modules
๊ฐ์ ๊ฒ์ ๋ช
์ ์ ์ผ๋ก ๋ฌด์ํ๊ณ ์ถ์ต๋๋ค.
๋๊ตฌ๋ ์ง ์ฐพ๊ณ ์๋ ์ฌ๋์ ์ํด -gulp-mocha ๋ ์ด๊ฒ์ ๋ฌ์ฑ ํ ์ ์์ต๋๋ค, ๋๋ ๋จ์ง ๋ด๊ฐ ํ์ํ์ง ์์ ๊ณณ์ gulp
๋ฅผ ํฌํจํ๋ ๊ฒ์ ์ซ์ดํฉ๋๋ค.
์ ์ ์๊ฐ์๋ด์ด์ด ์์ด๋์ด๋ฅผ +1ํ๊ณ ์ถ์ต๋๋ค. ์ผ๋ฐ์ ์ธ JavaScript ํ๋ก์ ํธ์ ๋ฌ๋ฆฌ ์ ๋ GO๊ฐ ๋จ์ ํ ์คํธ๋ฅผ ์ํํ๋ ๋ฐฉ์์ ๋ฐ๋ฅด๊ณ ํ ์คํธ๋๋ ๋ชจ๋ ๋จ์ผ ํ์ผ ์์ ์ฌ์ ํ์ผ์ ํฌํจํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ด ํ๋ก์ ํธ ์ค ํ๋์ ๋๋ ํ ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
main.js
main.spec.js
utilities.js
utilities.spec.js
์ด๋ฌํ ์ ํ์ ์กฐ์ง์ ํ ์คํธ ํ์ผ์ ๋จ์ผ ๋๋ ํ ๋ฆฌ๋ฅผ ํํค์น๋ ๊ฒ๋ณด๋ค ํจ์ฌ ์ฝ๊ฒ ํ ์คํธ๋ฅผ ์ฐพ์ ์ ์๋๋กํฉ๋๋ค. ํญ์ ํ ์คํธ๊ฐ ํ ์คํธํ๋ ํ์ผ ๋ฐ๋ก ์์ ์์น ํ ๊ฒ์ผ๋ก ์์ํ๊ณ ๋ด ๋น๋ ์คํฌ๋ฆฝํธ๋ ๋ฐฐํฌ ๋ ๋ฒ์ ์ ๋ชจ๋ .spec.js ํ์ผ์ ์คํฌ๋ฆฝํธํฉ๋๋ค.
๋นํ์ค ๋ ์ด์์์ผ๋ก ์ธํด ๋ด๊ฐ ์ํ๋ ๊ฒ์ node_modules ๋๋ ํ ๋ฆฌ๋ฅผ ์ ์ธํ ๋ชจ๋ ํด๋๋ก ๋ชจ๋ ๋จ์ ํ ์คํธ๋ฅผ ์คํํ๋ ๊ฒ์ ๋๋ค.
์ง๊ธ์ Windows ์์๊ฐ ์์ง๋ง ์ฐพ๊ธฐ ๊ตฌ๋ฌธ์ด Windows์์ ์๋ํ๋์ง ์ฌ๋ถ๋ ํ์คํ์ง ์์ต๋๋ค. ์ ์๊ฐ์๋ ์ ์ธ ์ต์ ์ด ํจ์ฌ ๋ ์ง๊ด์ ์ผ ๊ฒ์ ๋๋ค. ๊ฒ๋ค๊ฐ ๊ฑฐ์ ๋ชจ๋ ๋จ์ ํ ์คํธ ํ๋ ์ ์ํฌ์๋ ์ด์จ๋ ํ์ผ์ ๋ฌด์ํ๋ ๋ฐฉ๋ฒ์ด ํฌํจ๋์ด ์์ผ๋ฏ๋ก ํจ๋ฆฌํฐ๊ฐ ์ข์ ๊ฒ์ ๋๋ค.
์๋
ํ์ธ์, ์ ๋ชจ๋ ํ
์คํธ๋ *.test.js
ํ์์ ์ง์ํฉ๋๋ค. ๋ชจ๋ tests
๋๋ ํ ๋ฆฌ์ ์์ต๋๋ค. ํ์ฌ ์ ์ธํ๊ณ ์ถ์ ํ
์คํธ๊ฐ ๋ช ๊ฐ ์์ผ๋ฉฐ ./test/**/*.js
mocha์ ๊ธฐ๋ณธ ๊ฒฝ๋ก๋ฅผ ๊ณ์ ์ ์งํฉ๋๋ค. ์ด๋ป๊ฒํ๋์?
๋ ๊ฐ์ ๊ฐ๋ณ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋๋ ๊ฒ์ ์ฌ๊ธฐ์ ์๋ํ์ง ์์ผ๋ฉฐ ๋๋ ํฐ๋ฆฌ๊ฐ์ ํ ์คํธ๋ฅผ ์ด๋ํ๋ฉด VCS์์ ๋ง์ ์์์ด ๋ฐ์ํ๋ค๋ ๋ฐ ๋์ํด์ผํฉ๋๋ค.
@calebthebrewer ๊ณ ๋ง๊ฒ๋ ํ๋ก์ ํธ์์
+1 @calebthebrewer
Angular 2.0๊ณผ Polymer๋ ๊ตฌ์ฑ ์์ ๋ชจ๋์ ์์ผ๋ฏ๋ก @KrisSiegel์ ๋์ํฉ๋๋ค. ๋ชจ๋ ์ฝ๋๋ฅผ ๋ฒ๋ค๋ก ์ ์งํ๋ฉด ๊น๋ํ๊ณ ๋ชจ๋ ์์ด๋ฉฐ ์ ์ง ๊ด๋ฆฌ๊ฐ ์ฌ์ด ํ์ผ ๊ณ์ธต์ด ์ ์ง๋ฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก q
promise ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ
์คํธ๋ฅผ๋ก๋ํ๋ ๋ฐ ์์ ํ ์์๋ ๋ฌธ์ ๊ฐ ์์ต๋๊น?
import q from 'q';
import authRouterTest from '../app/routes/_authentication.router.e2e.js';
import productRouterTest from '../app/routes/_product.router.e2e.js';
import productModelTest from '../app/models/product.model.spec.js';
// Dynamically constructed sequence of functions
let funcs = [ productModelTest(), authRouterTest(), productRouterTest() ];
// This function takes an array of promise-producing functions and
// runs them sequentially.
let execTests = () => {
let result = q();
funcs.forEach((f) => {
result = result.then(f);
});
return result;
};
// Execute tests
execTests();
์ด๋ ๊ฒํ๋ฉด ์ด๋์์๋ ํ์ผ์ ๊ฐ์ ธ์ฌ ์ ์์ผ๋ฉฐ test/
์ ํ๋์ ํ
์คํธ ํ์ผ ๋ง์์ ์ ์์ต๋๋ค.
๋ง์ง๋ง ํ ์คํธ ๋ธ๋ก ๋ด์์ ์ฝ์์ ํด๊ฒฐํ๊ณ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ ํ ์คํธ๋ฅผ ๋ํ ํ ์ ์์ต๋๋ค.
import q from 'q'
export default () => {
let Q = q.defer();
describe('something', () => {
it('should', (done) => {
...
});
});
describe('something', () => {
it('should', (done) => {
...
});
it('should', (done) => {
...
Q.resolve('test complete');
});
});
return Q.promise;
};
๋ด๊ฐ ๊ณ ๋ คํ์ง ์๋ ๊ฒ์ด ์๋ค๋ฉด ๊ฝค ์ ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ฌ์ ํ glob์ ๋ํด ๋ฌด์ํด์ผํฉ๋๋ค. bash ๋ช ๋ น์ ์ฌ์ฉํ๋ ๊ฒ์ ํฌ๋ก์ค ํ๋ซํผ ์๋ฃจ์ ์ด ์๋๋๋ค.
+1
node_modules
์ ์ธํ๊ณ ์ถ์ต๋๋ค. Exclusion
๋ recursive
์ ๋งค์ฐ ํธ๋ฆฌํ ๋๋ฐ์์ฒ๋ผ ๋ณด์
๋๋ค.
@godspeedelbow ํน์ ๋๋ ํ ๋ฆฌ๊ฐ ๋ช
์ ์ ์ผ๋ก ๋ฌด์๋์ด์ผํ๋ ์ด์ ๋ ๋ฌด์์
๋๊น? ์ผ๋ฐ์ ์ผ๋ก node_modules
์ด ํ
์คํธ ๋๋ ํ ๋ฆฌ์ ์๋ค๋ ์์์ ๋ฃ์ง ๋ชปํฉ๋๋ค.
FWIW, ๋๋ ์ด๊ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋๋ ํ ์คํธ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฒด๋ณด๋ค ํจ์ฌ ๋ ํ์ฅ๋๋ ๋ช ๊ฐ์ง ํ๋ก์ ํธ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ด๊ฒ์ ๋ ์ ๊ตฌ์ฑ ํ ์์๊ฒ ํด์ค ๊ฒ์ ๋๋ค (ํฝ์ค๋ ํ ์คํธ ๋๋ ํ ๋ฆฌ IMHO์ ์ํฉ๋๋ค).
node_modules
๋ฌด์ํ๋ ๊ฒ์ ์์์น ๋ชปํ ์์
์ ์ํํ๊ฑฐ๋ (์ : ํ
์คํธํ๋ ํ์ผ ์์ ์ฌ์ ํ์ผ์ ๋ณด๊ดํ๋ ๊ฒฝ์ฐ์ ํ
์คํธํ๋ ์ฝ๋์์ ๋จ์ด์ง ๋จ์ผ ํด๋์ ๋ณด๊ดํ๋ ๊ฒ๊ณผ ๊ฐ์ด) ๋๋ ์ํ๋ ๊ฒฝ์ฐ ์ค์ํฉ๋๋ค. ๊ธฐ๋ณธ ํ๋ก์ ํธ ๋ฐ ํฌํจ ๋ ์ผ๋ถ ํ๋ก์ ํธ (์๋ง๋ ํ
์คํธํ๋ ค๋ npm ๋ฆฌํฌ์งํ ๋ฆฌ๊ฐ ์๋ ๋ด๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ผ ์ ์์)์ ๋ํด ๋จ์ ํ
์คํธ๋ฅผ ์คํํ์ง๋ง ์์ฒด ์ข
์์ฑ ๋ด์์ ๋จ์ ํ
์คํธ๋ฅผ ์คํํ๊ณ ์ถ์ง ์์ต๋๋ค. .
์ด ๋ฌธ์ ๋ ๊ฑฐ์ 1 ๋ ๋์ ๋ฐ์ ํ์ผ๋ฏ๋ก ๊ตฌํ ๋ ๊ฒ์ด๋ผ๋ ํฌ๋ง์ด๋ณ๋ก ์์ต๋๋ค. ํด๊ฒฐ ๋ฐฉ๋ฒ์๋ ํ๋ซํผ ๋ณ ํฐ๋ฏธ๋ ๋ช ๋ น์ด ํ์ํ๊ฑฐ๋ ํ ์คํธํ๋ ค๋ ๊ฐ ๋๋ ํฐ๋ฆฌ์ ๋ํ ํจํด์ ๋ช ์ ์ ์ผ๋ก ์ง์ ํ๊ธฐ ๋๋ฌธ์ ๊ตฌํํ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฐ๋ผ์ ํ ์คํธ ์คํฌ๋ฆฝํธ์ ์ถ๊ฐ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ถ๊ฐํด์ผํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ ํฌํฌํ๊ณ ์ง์ ํ ๊ฒ์ด์ง๋ง ๊ฐ ๋๋ ํ ๋ฆฌ์ ํจํด์ ์ง์ ํ๋ ํดํค ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ชจ์นด์ ๊ตฌํํ ์๊ฐ์ ์ฐพ๋ ๊ฒ๋ณด๋ค ์ฝ์ต๋๋ค.
@KrisSiegel ํญ์ src/**/*.js
๋ฐ src/**/*.spec.js
์์ต๋๋ค. ํ๋ก์ ํธ ๋ฃจํธ์์ ์์ํ๋ ๊ฒ๋ณด๋ค Go ๋ฐ Rust ํ๋ก์ ํธ์์ ๋ ์์ฃผ ๋ด
๋๋ค. ์ฌ์ค ํ์๋ ๋น๊ต์ ๋๋ฌผ๋ค.
๋๋ ๊ทธ๋ค์ด ๋๊ตฐ๊ฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ค๊ณ ์๊ฐํ์ง๋ง ์๊ฐ์๋ด์ด ์ค์ค๋ก ํ ์ ์์ต๋๋ค. ์์ฑํ๊ธฐ ์ด๋ ค์ด ํจ์น์ฒ๋ผ ๋ณด์ด์ง ์์ต๋๋ค (๋ ผ๋ฆฌ๊ฐ ์คํ๊ฒํฐ ์ฝ๋ ์ํ ๊ธฐ๊ณ ์๋ง์ด ์๋ ๊ฒฝ์ฐ).
ํ์๋ Mocha, Jasmine, Tape ๋ฑ์ ์์ ํ ๋์์ด ๋ ์ ์๋๋ก ์์ฒด ํ ์คํธ ํ๋ ์ ์ํฌ๋ฅผ ์์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ธ์ ์ผ๋ก์ด ์์ ์ ์ํํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฅ๋๊ฐ ํ๋ก์ ํธ ATM์์๋ ์ฌ์ ํ ์งํ์ค์ธ ์์ ์ด ๋๋ฌด ๋ง์ต๋๋ค.
ํ๋ ์ ์ํฌ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋ถํธ ์คํธ๋ฉํ๊ธฐ ์ํด Mocha๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋๋ ์์ ํ ๋ ๋๊น์ง ์ฒ์์ Chai๋ฅผ ๋จ์ ์ ์ฌ์ฉํ๋ค.
๋ค, ๊ทธ๊ฒ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋๋ค. ์คํ๊ณผ ์์ค ํ์ผ์ ์ง ์ง๋ ๊ฒ์ ๋ํด์๋ ๋๊ฐ์ด ๋งํ ์ ์์ง๋ง ๊ทธ๋ ๊ฒ ๊ตฌ์ฑ๋ ๋ง์ JavaScript ํ๋ก์ ํธ๋ฅผ ๋ณด์ง ๋ชปํ์ต๋๋ค. ๋๋ ๋ณธ์ง์ ์ผ๋ก ๊ทธ ํจํด์ ์ฌ์ฉํ์ง๋ง ์ด๋ฏธ ์์ฒด ์ฌ์ฉ์ ์ง์ ๋น๋ ์์คํ ์ผ๋ก ๊ฝค ํฐ ํ๋ก์ ํธ์ ๋ค์ด๊ฐ๋ฉด ๋ณ๊ฒฝํ๊ธฐ๊ฐ ํญ์ ์ฌ์ด ๊ฒ์ ์๋๋๋ค.
Exclude๋ ๋ง์ ์ ํธ๋ฆฌํฐ๊ฐ ๊ฐ์ง๊ณ ์๋ ๋งค์ฐ ๊ธฐ๋ณธ์ ์ธ ํจํด์ ๋๋ค. ๋ชจ์นด๊ฐ ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค :). ์ด ๋ฌธ์ ๋ ํ๋ซํผ ๋ณ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ธฐ๋ฐ์ผ๋ก ์ข ๊ฒฐ ๋์๊ธฐ ๋๋ฌธ์ ํจ์น๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ๋ณด๋ค ๋ฐ๋์งํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ฒ์ด ๋ชจ์นด ์ฌ๋๋ค์ด ์ค์ ๋ก ์ํ๋ ๊ฒ์ด๋ฉด ๋ช ์ฃผ ์์ ์๋ฃ๋์ง ์์ผ๋ฉด ํ์คํ ํจ์น๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
@KrisSiegel ๋๊ตฐ๊ฐ๊ฐ ์ค์ ๋ก ํจ์น๋ฅผ ์์ฑํ๋ค๋ฉด, ์ง๊ด์ ์ด์ง ์๊ณ ํน๋ณํ ๊ตฌ๋ฌธ์ด๋ ์ถ๊ฐ ํ๋๊ทธ๋ฅผ ํฌํจํ์ง ์๋ ํ ์๋ง๋ ๋ณํฉ ๋ ๊ฒ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค. FWIW, ์์ง _this_์ ๋ํ PR์ด ์์ผ๋ฉฐ ํ๋ซํผ ์ข
์์ ์ ๊ณ ๋ คํ๋ฉด์ด ๋ฌธ์ ๊ฐ ์ข
๊ฒฐ ๋ ์ด์ ๋ ๋งค์ฐ ์ฝํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ช ๊ฐ์ง ํ
์คํธ๋ฅผ ์คํํ๊ธฐ ์ํด GNU find
์ (๋ฅผ) ์ค์นํ๋ ค๋ Windows ์ฌ์ฉ์๊ฐ ๋ง์ง ์์ต๋๋ค.
๋ซํ์์ ์ ์์ง๋ง Node์ ๊ตฌํ์ด ์ฝ๊ฐ ๋ค๋ฅผ ์ ์์ง๋ง ( ๋ซํ ๋ฌธ์ , PR ์งํ ์ค ) Node with Web workers ์์ ์ด๋ฏธ ๋น์ทํ ์ํฉ์ด ๋ฐ์ํ๊ณ ์์ต๋๋ค.
๊ฐ์น์ ๋ํด +1ํ์ญ์์ค. ๋ด๊ฐ ๋ง๋ ํ๋ก์ ํธ์๋ app
๋๋ src
ํด๋๊ฐ ํ์ํ์ง ์์ง๋ง ๋์ ์ธํฐํ์ด์ค ๊ตฌํ์ด ๋ค๋ฅธ ๋ค์ํ ์์ ๋ช
๋ช
๋ ํด๋๊ฐ ์์ต๋๋ค. ๋ํ ํ
์คํธ๋ฅผ ์ํด ๋จ์ผ ํด๋๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๊ฐ ์ธํฐํ์ด์ค์ ๋ํด ํ
์คํธ๋ฅผ ๋ฒ๋ค๋ก ์ ์งํ๊ณ ์ถ์ต๋๋ค.
.mochaignore
๋๋ ๋ค๋ฅธ ์ต์
์ ์ฌ์ฉํ์ฌ ๋ฌด์ํ ํ์ผ์ ์ง์ ํ ์์๋ ๊ฒ์ด ์ด์์ ์ผ ๊ฒ์
๋๋ค. ๊ทธ๋ ๊ฒํ๋ฉด **/*.spec.js
glob์ผ๋ก ์คํํ๊ณ node_modules
ํ
์คํธ๋ฅผ ํฌํจ ํ ์ ์๋ค๋ ๊ฑฑ์ ์ํ์ง ์์๋๋ฉ๋๋ค.
๊ฑฐ์ ๋ชจ๋ ๋ค๋ฅธ ๋น๋ ๋๊ตฌ์์์ด๋ฅผ ํ์ฉํ๋ฉฐ .npmignore
, .gitignore
, .jshintignore
, jscs๋ .jscsrc
๋ฅผ ํตํด ๊ตฌ์ฑ ํ ์์๋ ์ต์
์ ์ ๊ณตํฉ๋๋ค. ์ ์ ๋ ๋ง์ ์ฌ๋๋ค์ด ์๋ง ์๋ ์ ๊ทผ ๋ฐฉ์์์ ๋ฒ์ด๋ ๊ตฌ์ฑ ์์ / ๊ธฐ๋ฅ ํ์ผ ๋ฐ ํด๋ ๊ตฌ์ฑ์ผ๋ก ์ด๋ํจ์ ๋ฐ๋ผ Mocha๋ ์ง์ํ๋ค๋ฉด ์ ์ฉ ํ ๊ฒ์
๋๋ค.
@isiahmeadows ๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ธ๊ธํ๋ฏ์ด ์ฝ๊ฒ ๋ณ๊ฒฝํ ์์๋ ํด๋ ๊ตฌ์กฐ์ ๊ฐํ ์์ผ๋ฏ๋ก services/
, routes/
๋ฑ์ด node_modules
์ฒ๋ผ ํ๋ก์ ํธ์ ๋ฃจํธ์ ์์ต๋๋ค. node_modules
๋ฅผ ์ ์ธํ๋ ์ธ ๋ฒ์งธ ๋๊ตฌ (๋ช
๋ น ์ค, ๊ฟ๊บฝ ๊ฟ๊บฝ ๋๋ ๋ค๋ฅธ ๊ฒ)๊ฐ ํ์ํ๋ฏ๋ก ๋ด ํ
์คํธ ๋ง ํ
์คํธ ํ ์ ์์ต๋๋ค.
์ด๋์๋ถํฐ ์์ํด์ผํ ์ง ์์๋ค๋ฉด ๋ชจ์นด๋ก ์ง์ ๊ตฌํํ๊ณ ์ถ์ต๋๋ค. :)
@godspeedelbow @adambuczynski ์์ ํด๊ฒฐ์ฑ :)
"scripts": {
"test": "mocha $(find . -name '*.spec.js' ! -ipath '*node_modules*')"
}
์๋
ํ์ธ์ @danielstjules ๊ฐ์ฌํฉ๋๋ค! ์๋ํ์ง๋ง ์ด๋ค ์ด์ ๋ก find . -name '*.spec.js' ! -ipath '*node_modules*'
๋ ํ๋์ ํ
์คํธ ํ์ผ ๋ง ์ฐพ์ต๋๋ค.
ํ
์คํธ๊ฐ ๋ฐ๋ฅด๋ ํจํด์ ๋ง๊ฒ '*.spec.js'
์ ์
๋ฐ์ดํธ ํ์ต๋๊น? ์๋ฅผ ๋ค์ด _all_ js ํ์ผ๊ณผ ์ผ์นํ๋ ค๋ฉด ๋ค์์ ์ฌ์ฉํฉ๋๋ค.
"scripts": {
"test": "mocha $(find . -name '*.js' ! -ipath '*node_modules*')"
}
@danielstjules๋ ํํธํ์ง๋ง ๋ด๊ฐ ๋ฏฟ๋ ์ฐฝ์์๋ ์๋ํ์ง ์์ต๋๋ค.์ด ์ฑ์ ๊ฒฝ์ฐ ๋ฌธ์ ๋ ์๋์ง๋ง ์ฝ์ ํ๋ ๊ฒ์ ์ฃผ์ ํฉ๋๋ค.
๊ทธ ๋์ ์ฑ ์ฝ๋์ ํ
์คํธ๋ฅผ app
ํ์ ํด๋๋ก ์ด๋ํ์ฌ ํ
์คํธ ์ฉ์ผ๋ก ํด๋น ํด๋๋ฅผ ๋์์ผ๋ก ์ง์ ํ๊ณ node_modules
๋๋ ๋ค๋ฅธ ํด๋์ ๋ํด ๊ฑฑ์ ํ์ง ์๋๋กํ์ต๋๋ค.
@danielstjules ์, ๋ชจ๋ ํ
์คํธ ํ์ผ์ *.spec.js
ํ์์
๋๋ค. ์ด๋ค ์ด์ ๋ก ์ด์ ์๋ ์๋ํ์ง ์์์ง๋ง ์ด์ ๋ ๋ฌธ์ ์์ด ์๋ํฉ๋๋ค. * NIX ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋ค๊ฐ์ค๋ ์ ๊ณต์์์ด ์์
์ด ์๋ฃ๋๋ ๊ฒ์๋ณด๊ณ ์ถ์ต๋๋ค. ํน๋ณํ .mochaignore
์ง์ํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@boneskull ๊ฐ์ฌํฉ๋๋ค.
๋ค์ ๋ฉ์ด์ ๋ฆด๋ฆฌ์ค์์๋ mocha.opts
๋ฅผ ์ฌ์ฉํ๋ ๋์ ํ๋ก์ ํธ์ ๋ฃจํธ์ ๋ฃ์ ์์๋ ์ต์
์ ๋ฌ์ ์ํด๋ณด๋ค "ํ์ค"์ธ .mocharc
๊ตฌํ์ ๊ณ ๋ ค ํ์๊ฒ ์ต๋๊น? test
ํด๋์ ์์ต๋๊น?
๊ทธ๋ฌ๋ฉด Mocha๋ฅผ ํจ์ฌ ์ฝ๊ฒ ๊ตฌ์ฑ ํ ์ ์์ผ๋ฉฐ ๋ค๋ฅธ ๋๊ตฌ์ ํจ๊ป ์ํํ๋ ๋ฐฉ์๊ณผ ์ผ์นํฉ๋๋ค. ๊ฒ๋ค๊ฐ, ๊ทธ๊ฒ์์ด ์ฐ๋ฆฌ์๊ฒ ๊ฐ์ํ์ง ๊ฒ์ด๋ผ๊ณ test
ํด๋ ๋จ์ง์ ๋ํ mocha.opts
. (์ฐ๋ฆฌ๋ ๋ชจ๋ ํ
์คํธ๋ฅผ ํ
์คํธํ๋ ๋ชจ๋๊ณผ ํจ๊ป ๋ฐฐ์นํฉ๋๋ค).
@adambuczynski ์ ๋์ ์ผ๋ก. ์ ๋ mocha.opts
ํฌ์ด ์๋๋๋ค.
@adambuczynski ์ข์ ์๊ฒฌ์ ๋๋ค. ๋์ํฉ๋๋ค. ํ์ค .mocharc ์ต์ ํ์ผ๋ ๊ฐ๊ณ ์ถ์ต๋๋ค. ์ฝ๋ ์์ ํ ์คํธ๋ฅผ ์ ์งํ๋ ๊ฒ์ด ๋๋ฌด ์ข๊ธฐ ๋๋ฌธ์ ๋ ์ด์ ํ ์คํธ ๋๋ ํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
+1, ์ ์ธ๊ฐ ์ ๋ง ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
@adambuczynski @boneskull ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด --opts
๋ฅผ ์ฌ์ฉํ์ฌ opts ํ์ผ์ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ ์ ์์ง๋ง ์์ ๋ ์ ๊ณตํ์ง ์์ต๋๋ค. ํ์ฌ ํ๋ก์ ํธ์์ ์ด๊ฒ์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ mocha --opts .mocharc
๋ก ์๋ํ๋์ง ํ์ธํ ์ ์์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค @GRUBES. ๊ฒฐ๊ตญ์๋ ํ
์คํธ ์ค์ ๋์ฐ๋ฏธ๋ ๋ฐฐ์นํ๊ธฐ ๋๋ฌธ์ test
ํด๋๋ฅผ ๊ณ์ ์ฌ์ฉํ์ง๋ง ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
Glob์๋ ignore ์ต์ ์ด ์์ผ๋ฏ๋ก exlude ์ต์ ์ ์ถ๊ฐํ๊ณ glob ignore๋ก ์ ๋ฌํ๋ ๊ฒ์ ํฐ ๋ฌธ์ ๊ฐ ์๋๋๋ค.
๋ฌด์ ํจํด ๋๋ glob ํจํด ๋ฐฐ์ด์ ์ถ๊ฐํ์ฌ ์ผ์น๋ฅผ ์ ์ธํฉ๋๋ค. ์ฐธ๊ณ : ๋ฌด์ ํจํด์ ๋ค๋ฅธ ์ค์ ์ ๊ด๊ณ์์ด ํญ์ dot : true ๋ชจ๋์ ๋๋ค.
์ด๊ฒ์ด ์ 1 ๋ ์ด์ ๊ฑธ๋ฆฌ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. :-)
@ inf3rno BTW, ๋๊ตฐ๊ฐ๊ฐ ์ค์ ๋ก ์์ ํจ์น๋ฅผ ์์ฑํ๋ค๋ฉด์ด ๋ฌธ์ ๋ ํจ์ฌ ๋ ์ผ์ฐ ํด๊ฒฐ๋์์ ๊ฒ์ ๋๋ค.
@isiahmeadows ๊ทธ๋ ,ํ์ง๋ง ๊ทธ๊ฑด ๋ด๊ฐ ์๋์ผ. :๋
๊ทธ๋๋ PR์ด ํ์ํฉ๋๊น? test
๋ฐ test-integration
์ ๋ํด ์ฌ๋ฌ ๋๋ ํฐ๋ฆฌ ๋์ ํ
์คํธ ํ์ผ ์ฝ ๋ก์ผ์ด์
์ ์ฌ์ฉํ๋ ๊ฒ์ ์ ํธํ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์ถ๊ฐํ๊ณ ์ถ์ต๋๋ค.
--exclude
์ ๊ฐ์ ์ต์
์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋๋ mocha test/*.js !test/_*.js
๊ฐ์ ๊ฒ์ ์ง์ํ์ธ์
๊ณ์ฐ ๋ Glob : mocha "./{,!(node_modules)/**/}*.test.js"
๋ node_modules๋ฅผ ์ ์ธํ ๋ชจ๋ * .test.js ํ์ผ์ ๊ฐ์ ธ์ค๊ณ mocha "./test/**/!(notThisOne).js"
๋ notThisOne.js๋ฅผ ์ ์ธํ ํ
์คํธ ํด๋์ ํ์ ํด๋์ ๋ชจ๋ ํญ๋ชฉ์ ๊ฐ์ ธ์ต๋๋ค.
๋ํ๋ณด์ญ์์ค:
https://github.com/isaacs/node-glob#glob -primer
https://github.com/isaacs/node-glob/issues/62
์๋ ํ์ธ์.
ํฐ๋ฏธ๋์์ ์คํํ๋ฉด
mocha "./{,!(node_modules)/**/}*.test.js"
-bash: !: event not found
์ด ๋ฌธ์๋ฅผ ์ด์ค์ผ์ดํํด์ผํฉ๋๊น?
@mdumouchel ์์ ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํ์ญ์์ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ทธ๋ ์ต๋๋ค.
ํํ
์ฌ์ ํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
node_modules/mocha/lib/utils.js:630
throw new Error("cannot resolve path (or pattern) '" + path + "'");
^
Error: cannot resolve path (or pattern) './{,!(node_modules)/**/}*.test.js'
๊ฒฐ๊ตญ find ๋ช ๋ น์ ์ฌ์ฉํ์ต๋๋ค.
mocha $(find . -type d -name node_modules -prune -o -name '*.test.js')
@mdumouchel ๋ฒ์ 2.x (์ฆ, npm์์๋ ๊ฒ)๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ด์จ๋ ์๋ํ์ง ์์ต๋๋ค. 3.x, IIRC์์ ์ง์์ด ์์๋ฉ๋๋ค.
์ด์ํฉ๋๋ค. Bash์์ ์๋ํด ๋ณด์๊ณ ํฐ ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํ ์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๋๊ตฌ๋ ์ง Windows์ Bash์์ ๋ชจ๋ ์๋ํ๋ ๊ตฌ๋ฌธ / ์ด์ค์ผ์ดํ๋ฅผ ์๊ณ ์์ต๋๊น?
๋ํ "cannot resolve path"์ค๋ฅ๋ ๊ฒฝ๋ก๊ฐ ํ๋ก์ ํธ์ ํ์ผ๊ณผ ์ผ์นํ์ง ์์์ ์๋ฏธํฉ๋๋ค. ๋ด ํ ์คํธ์์ ์ด์ ์ฃผ์์ผ๋ก ๋ณต์ฌํ๋ ๊ฒ์ ๋ง์ณ ๋์ง ์๋ ํ, ํด๋น ์์ค ํ์ผ๊ณผ ํจ๊ป ์ด๋ฆ์ด ".test.js"๋ก ๋๋๋ ํ ์คํธ ํ์ผ์ด์์ ๋ ๋ด๊ฐ ์ค ๊ฒฝ๋ก๋ ํ์ฌ ๋ฒ์ ์์ ์๋ํ์ต๋๋ค.
# 2173 ์ฐธ์กฐ
Eslint ๋ --ignore-path
(๋ฐ .eslintignore
)๊ฐ์๋ ํ์ผ์ ๋ฌด์ํ๋ ์์
์ ํ๋ฅญํ๊ฒ ์ํํฉ๋๋ค.
์ฐธ์กฐ : http://eslint.org/docs/user-guide/command-line-interface#ignoring -files
๋ชจ์นด์ ๋น์ทํ ๊ฒ์ด ๊ต์ฅ ํ ๊ฒ์ ๋๋ค. : two_hearts :
๋ด ํด๊ฒฐ ๋ฐฉ๋ฒ :
eslint "test/!(fixtures)/**/*.js" "test/*.js"
๋ด ํ์ผ ๊ตฌ์กฐ
.
โโโ src
โโโ test
โโโ fixtures
โโโ data.js
โโโ foo.js
โโโ bar.js
๋ฌธ์ : Mocha๋ ๋ ๊ฒฝ๋ก ์ค ํ๋๋ผ๋ ์ผ์นํ์ง ์์ผ๋ฉด Error: cannot resolve path (or pattern)
๋ฅผ์ค๋๋ค. : disappointed_relieved :
์ข์, ๋๋ ์ง์ ํด. ์ด๊ฒ์ ์ฌ์ฉ์ ์นํ์ ์ด์ง ์์ต๋๋ค.
์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐํด์ผํ๋ค๊ณ ์๊ฐํ๋ ๊ฒ์ ๋๋ค.
--exclude <glob-or-path>
--exclude
์ _multiple_ ์ธ์คํด์ค ์ง์--exclude
์ต์
๊ณผ ๋ชจ๋ ๋น ์ต์
์ธ์๋ฅผ ๋จ์ผ ๋ชฉ๋ก์ผ๋ก ๊ฒฐํฉํฉ๋๋ค (๊ธฐ๋ณธ์ ์ผ๋ก globby ๊ฐ ์ํํ๋ ์์
).ํ์ฌ ์ฐ๋ฆฌ๋ ๋ชจ๋ glob ์ผ ์์๋ _n_ ๋น ์ต์ ์ธ์๋ฅผ ์ง์ํ์ง๋ง ์ด๊ฒ์ _additive_๋ฟ์ ๋๋ค. ์์๋๋ก ์๋ํ์ง ์์ต๋๋ค.
$ mocha 'src/**/*.spec.js' '!src/forbidden/**/*.spec.js'
๋ฐ๋ผ์ ์์ ๋ด์ฉ์ด ์๋ํ๊ณ --exclude
๋ !
์คํ์
๋๋ค.
๋ํ .mochaignore
(# 2036) ์ง์์ ์ข๊ฒ ๋ค๋ฆฌ์ง๋ง ๋ณ๋์ ๋ฌธ์ ์
๋๋ค. .gitignore
๊ฐ์ ๋์์ํ๊ธฐ ์ํด ๋์ด ์ฌ ์์๋ 3p ๋ชจ๋์ด ์์ด์ผํฉ๋๋ค. ESLint๊ฐํ๋ ์ผ์ด ์ฐ๋ฆฌ์ ๋ชฉ์ ์ ์ถฉ๋ถํ๋ค๊ณ ํ์ ํฉ๋๋ค.
... ๊ทธ๋ฆฌ๊ณ ๋ช ํํ์ง ์์ ๊ฒฝ์ฐ ๋ช ๋ น ์ค์์ ์ธ์ฉ๋์ง ์์ glob์ ์ฌ์ฉํ์ง ๋ง์ญ์์ค. # 2355 ์ฐธ์กฐ
๋๋๊ฒ๋ --ignore-path
์ ๊ฐ์ ์ต์
์ด ์์ง ์์ต๋๋ค. ๋ชจ๋ ํ
์คํธ๋ฅผ tests
ํด๋์ ๋ฃ๋ ๊ฒ ์ธ์ ๋ชจ๋๊ณผ ํจ๊ป ํ
์คํธ๋ฅผ ๋ฃ์ ์์๋ ์ด์ ๊ฐ ์์ต๋๋ค.
+1
ํจํด๋ณ๋ก ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ฌด์ํ๋ ๊ฒ์ ๋งค์ฐ ์ ์ฉํ ๊ธฐ๋ฅ์
๋๋ค.
ํํ
ํญ์ src / / .js ๋ฐ src / /.spec.js ํ ์ ์์ต๋๋ค.
์๋์, ํ ์ ์์ต๋๋ค. **/*
ํจํด ์ผ์น๊ฐ ๊นจ์ ธ์ ์ฌ๊ท ์ ์ผ๋ก ์๋ํ์ง ์์ต๋๋ค.
ํธ์ง : @ScottFreeCode ๋ ์๋์ ๋๋ตํฉ๋๋ค.
**/*
ํจํด ์ผ์น๊ฐ ๋์ด์ง๊ณ ์ฌ๊ท ์ ์ผ๋ก ์๋ํ์ง ์์ต๋๋ค.
๊ทํ์ ๊ฒฝ๋ก๊ฐ ์ธ์ฉ ๋์์ต๋๊น?
+1
https://github.com/zinserjan/mocha-webpack/issues/124์ ์ค๋ช ๋๋๋ก :
src/
์์๋ server.ts
๋ผ๋ ํ์ผ์ด ์์ต๋๋ค.์ด ํ์ผ์ ์ต์คํ๋ ์ค ์๋ฒ๋ฅผ ์คํํ๊ณ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋ฉ๋๋ค. ์๋ฒ๋ ์ผ๋ฐ์ ์ผ๋ก ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์คํํ ๋ ์๋ํ๋ฏ๋ก ํฌํธ๊ฐ ์ด๋ฏธ ์ฌ์ฉ ์ค์
๋๋ค.
๋ฐ๋ผ์์ด ํ์ผ ๋ง ์ ์ธ๋๋ ๊ฒ์ ์ํ์ง ์์ต๋๋ค.
์ด ๋ชจ๋ ์๊ฐ์ด ์ง๋ ํ์๋ ๊ด๋ฆฌ์๋ ์ฌ์ ํ ์ค๋๋ ฅ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ๋ชจ์นด๋ ๋ฌด์๊ฐ ํ์ํ๋ค๋ ๋ด ์๊ฒฌ์ ํ๋ช ํฉ๋๋ค.
๋ชจ์นด๋ ์บ๋ ผ์ ๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ํ ์คํธ ํ๋ ์ ์ํฌ๊ฐ ์ด๋งํ๋ ํ ์คํธ ํ๋ ์ ์ํฌ์ ํฌ๋ก์ค ํ๋ซํผ ๊ธฐ๋ฅ ์ธํธ์ ๋ํ ๊ธฐ์ค์ ๋์ด๋ ๊ฒ์ ์ด๋ป์ต๋๊น? ์ฐ๋ฆฌ๋ ๋ชจ๋ ๊ฒ์ Bash์๊ฒ ๋งก๊ธฐ๋ ค๋ ์ด๋ง์ ๊ทธ๋ง๋ฌ์ผํฉ๋๋ค. ์ด๋ฏธ 2017 ๋ .
๋ํ Windows ์ฌ์ฉ์๋ Bash์ !(glob)
(์ค์ ๋ก POSIX ํ์ค์ด ์๋ Bash-ism)๊ณผ ๋๋ฑํ ๊ฒ์ด ์๋ค๋ ์ ์ ์ง์ ํ ๊ฒ์
๋๋ค.
Glob JS ๋ชจ๋์ ํตํด ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ Mocha์ globbing์๋ Bash ์ข
์์ฑ์ด ์์ด์ผํฉ๋๋ค. (์ฐธ๊ณ : ๊ฒฝ๋ก๋ฅผ ์ธ์ฉ์ ์๋ฅผ ๋ค์ด, ์ด๋ป๊ฒ ๋ชจ์นด๋ ๊ฒ ๋ค๋ฅด๊ฒ ์ ์ฒ๋ฆฌ globs์ ํผํด์ผํ๋ค **
globstar ํ์ฅํ์ง ์๊ณ ์ด๋ ๊ทธ๊ฒ์ ๊ทธ ์ฐจ์ข
์ ํน๋ณํ๋ค.)
@ScottFreeCode glob์ ์ฌ์ฉํ ๋ extglob: true
๋ฅผ ์ฌ์ฉํฉ๋๊น? ์ด ๊ฒฝ์ฐ ํด๋น ๊ตฌ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ์ฌ ๋ซ์ ์ ์์ต๋๋ค (glob / minimatch๊ฐ ํด๋น ์ต์
์ด ํ์ฑํ ๋ ์ํ์์ ์ง์ํ๊ธฐ ๋๋ฌธ์).
glob์ ๊ฒฝ๋ก๋ฅผ ์ ๋ฌํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๋ ์์ ์์ glob ํจํด์ ํตํด ์์ ํ๋ ๋ถ์ ์ด ์๋ค๊ณ ํ์ ํ์ง๋ง ๋ชจ๋์ ์ด์ ๋ฒ์ ์ผ ์ ์์ต๋๊น? ์ด์จ๋ ์ฐ๋ฆฌ๋ ์ด์ค ๋ณ ๋์์ ๋ํ ํ ์คํธ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ๋๊ตฐ๊ฐ๊ฐ ์ผ๋ถ ๋ถ์ ํจํด๋ ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ํ ์คํธ๋ฅผ ์ ์ถํ๋ ค๋ ๊ฒฝ์ฐ (๋๋ ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ ๊ฐ์ง๊ณ ์๋ globbing ํ ์คํธ์์ ๊ฒฐํจ์ ๋ฐ๊ฒฌ ํ ๊ฒฝ์ฐ) ๊ทธ๊ฒ์ ์ข์ ๊ฒ์ ๋๋ค. .
๊ทธ๋ฌ๋ ๋ช
์์ ์ธ ignore
/ exclude
์ต์
์ ์ฌ์ฉํ๋ฉด ํ์คํ ์ด์ ์ด ์์ต๋๋ค. ์ค์ ๋ก ์ฌ๋ฌ ๊ฐ์ง ์ด์ ์ด ์์ต๋๋ค.
๋๋ ํ์ ์ ์ง๊ฐ ํน์ ์ ธ์ ์์กดํ๋ ๊ฒ์ด ์๋๋ผ๋ ์ ์ ๋ช ํํํ๊ณ ์ถ์์ต๋๋ค. ; ^)
ํฌํจ ๋ชฉ๋ก์์ ์ ์ธ ๋ชฉ๋ก์ ๋บ ๊ฒ์ด ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ถ์ ๋ ๋ถ๋ถ์ด์๋ ํฌํจ ๋ชฉ๋ก๋ณด๋ค ๋ ๊ฐ๋จํฉ๋๋ค.
์ฌ์ค, ๋๋ ๊ฑฐ์ ์์ด ๋ฒ๋ ธ์ต๋๋ค ๐
์ด ๋ฌธ์ ์ ์ค๋ ๋ชจ๋ ์ฌ๋ :
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ด์ ์ง์๋์ด์ผํ๋ฏ๋ก glob์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ๋๊ตฐ๊ฐ์ด ํน์ ํ๋์ ์ํ๋ฉด PR์ ๋ณด๋ด์ฃผ์ญ์์ค.
--exclude
์ต์
์ด ์๋ํฉ๋๊น?
๋ฌธ์ ์์ ์ฐพ์ ์ ์์ต๋๋ค.
@ sepo-one ๋ฌธ์๋ฅผ ์
๋ฐ์ดํธํ๊ธฐ ์ํด PR ์ ์ด์์ต๋๋ค.
mocha -h
๋ํด ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ์ต์
์ ๋ณผ ์ ์์ต๋๋ค.
๋ค, ์ด์ ๋ฒ์ ์ ๋ชจ์นด๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์
๊ทธ๋ ์ด๋๋๊ณ --exclude
์ต์
์ด ์์ต๋๋ค.
์ด์จ๋ ๋ฌธ์๋ ์
๋ฐ์ดํธ๋์ด์ผํฉ๋๋ค.
๊ฐ์ฌํฉ๋๋ค @outsideris
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ