Mocha: -๋ฌด์ž‘์œ„ ํ…Œ์ŠคํŠธ ์ฃผ๋ฌธ์„์œ„ํ•œ ์ฃผ๋ฌธ ์˜ต์…˜?

์— ๋งŒ๋“  2013๋…„ 06์›” 18์ผ  ยท  66์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: mochajs/mocha

--order ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ๋žŒ๋“ค์ด ์ฃผ๋ฌธ ์ข…์†์„ฑ์„ ๋ฐœ๊ฒฌ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ธ ๊ฐ€์ง€ ์˜ต์…˜์€ --order random , --order random:seed ๋ฐ --order default ์ž…๋‹ˆ๋‹ค. ๊ฐ ๋ฌด์ž‘์œ„ ์Šค์œ„ํŠธ๋Š” ์‚ฌ์šฉ ๋œ ์‹œ๋“œ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

RSpec์€ ์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ˆœ์„œ๋Š” ๋ฌด์ž‘์œ„์ž…๋‹ˆ๋‹ค. ๋ชจ์นด๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. --order ๋งค๊ฐœ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์„ธ๋ถ€ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. http://blog.davidchelimsky.net/2012/01/04/rspec-28-is-released/

์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•ด?

feature help wanted

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

to avoid cross-test dependencies without help of tooling ๋Š” ์‰ฝ์ง€๋งŒ, ์•Œ์•„ ์ฐจ๋ฆฌ์ง€ ์•Š๊ณ  ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ์— ์ด๋Ÿฌํ•œ ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋„ ์‰ฝ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ์˜ ๋ฒ„๊ทธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ๋œ ์‹œ์Šคํ…œ์˜ ๋ฒ„๊ทธ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฒ„๊ทธ๋Š” ์ฝ”๋“œ๊ฐ€ ํ…Œ์ŠคํŠธ ๋Œ€์ƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๋„๊ตฌ์—†์ด ๊ต์ฐจ ํ…Œ์ŠคํŠธ ์ข…์†์„ฑ์ด ์—†๋Š”์ง€ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

@visionmedia , ์žฌ๊ณ  ํ•ด์ฃผ์„ธ์š”.

๋ชจ๋“  66 ๋Œ“๊ธ€

meh, ๋„๊ตฌ์˜ ๋„์›€์—†์ด ๊ต์ฐจ ํ…Œ์ŠคํŠธ ์ข…์†์„ฑ์„ ํ”ผํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

to avoid cross-test dependencies without help of tooling ๋Š” ์‰ฝ์ง€๋งŒ, ์•Œ์•„ ์ฐจ๋ฆฌ์ง€ ์•Š๊ณ  ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ์— ์ด๋Ÿฌํ•œ ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋„ ์‰ฝ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ์˜ ๋ฒ„๊ทธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ๋œ ์‹œ์Šคํ…œ์˜ ๋ฒ„๊ทธ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฒ„๊ทธ๋Š” ์ฝ”๋“œ๊ฐ€ ํ…Œ์ŠคํŠธ ๋Œ€์ƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๋„๊ตฌ์—†์ด ๊ต์ฐจ ํ…Œ์ŠคํŠธ ์ข…์†์„ฑ์ด ์—†๋Š”์ง€ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

@visionmedia , ์žฌ๊ณ  ํ•ด์ฃผ์„ธ์š”.

+1 @yanovich. ์‹œ๋“œ ๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์ž„์˜ ์ˆœ์„œ ์˜ต์…˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ CI ํ™˜๊ฒฝ์—์„œ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

@visionmedia , mongoose ๋ชจ๋ธ์€ ๊ต์ฐจ ํ…Œ์ŠคํŠธ ์ข…์†์„ฑ์˜ ์‰ฌ์šด ์˜ˆ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. mongoose.model 'User', UserSchema ๋Š” mongoose.models ๋ฐฐ์—ด์— ๋ชจ๋ธ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ mongoose.models์—๋กœ๋“œ๋˜๋Š” ์‚ฌ์šฉ์ž ๋ชจ๋ธ์— ์˜์กดํ•˜๋Š” ํŒŒ์ผ์„ ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Comment.find().populate('_user').exec(cb) ๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ํ…Œ์ŠคํŠธ๊ฐ€ ์ฃผ์„ ํ…Œ์ŠคํŠธ ์ „์— ์‹คํ–‰๋˜๋ฉด ์•„๋งˆ๋„ require('./models/user') (๋˜๋Š” ๋ฌด์–ธ๊ฐ€)๊ฐ€ ์‚ฌ์šฉ์ž ๋ชจ๋ธ์„ mongoose.models์—๋กœ๋“œํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž ํ…Œ์ŠคํŠธ ์ „์— ์ฃผ์„ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋˜๋ฉด Schema hasn't been registered for model "User" ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ฃผ์„ API๊ฐ€ ์‚ฌ์šฉ์ž API๋ณด๋‹ค ๋จผ์ € ์‹คํ–‰๋˜๊ณ  ์ฃผ์„ ํŒŒ์ผ์ด ํŒŒ์ผ ๊ฐ„ ์ข…์†์„ฑ์ด ์žˆ์Œ์„ ์•Œ์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ ํ”„๋กœ๋•์…˜์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ํŒŒ์ผ์— require ( './ models / user') (๋˜๋Š” ๊ธฐํƒ€)๊ฐ€ ์žˆ๊ณ  ์‚ฌ์šฉ์ž๋ฅผ mongoose.models๋กœ๋กœ๋“œํ•˜๋Š” ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ ์ž‘์—…์— ํ”„๋กœ๋•์…˜ ๋ฌธ์ œ๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ž„์˜์˜ ์ˆœ์„œ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์€ ์ด์™€ ๊ฐ™์€ ์ž ์žฌ์  ์ธ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋Š” ๋ฐ ์œ ์šฉํ•œ ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ž˜ ํ‘œํ˜„ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋‹น์‹ ์˜ ์ƒ๊ฐ์„ ๋“ฃ๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

๋ฏธ์•ˆํ•ฉ๋‹ˆ๋‹ค. ๊ณผ์ž‰์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ชจ์นด๋Š” ๊ทธ๋Œ€๋กœ ๋ถ€ํ’€์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ์•„๋งˆ๋„ ์œ ์ง€ ๊ด€๋ฆฌ ๋ถ€๋‹ด์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ƒ๊ฐํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ์—์žˆ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ฒƒ๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์•„๋Š” ์‚ฌ๋žŒ๋“ค์€ ์ด๊ฒƒ์„ ์˜๋„์ ์œผ๋กœ ํ”ผํ•˜๋Š” ๊ฒƒ์ด ์‰ฝ์Šต๋‹ˆ๋‹ค. ์‹ค์ˆ˜๋กœํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์ด ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์„ ๋ชจ๋ฅธ๋‹ค๋ฉด (์˜ˆ : ํ˜ผํ•ฉ ๋œ ๊ฒฝํ—˜ ํŒ€) ์ผ์–ด๋‚  ๊ฐ€๋Šฅ์„ฑ์ด ๋งค์šฐ ๋†’์Šต๋‹ˆ๋‹ค. :)

๊ฝค ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๊ฒƒ์— ๊ด€์‹ฌ์ด์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค (๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๊ฒƒ์ด minitest์˜ ์ตœ๊ณ ์˜ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค). ํ•ฉ์ณ์ง€๋ฉด ๊ธฐ๊บผ์ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

+1 ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค! ํŒŒ์ผ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜์—ฌ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

+1 ์ด๊ฒƒ์€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค

: +1 :

: +1 :

+1 ์ด๊ฒƒ์€ ์ƒ๋‹นํžˆ ํฐ ๊ฒฐํ•จ์ž…๋‹ˆ๋‹ค.

rspec ์˜๋ฏธ๋ก ์€ ๋งค์šฐ ๊ฒฌ๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋ฌธ ์‹œ๋“œ๋ฅผ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜ ๋ฌด์ž‘์œ„๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌด์ž‘์œ„๋กœ ์‹œ๋“œ๋ฅผ ์„ ํƒํ•˜๋ฉด ์ถœ๋ ฅํ•˜๋ฏ€๋กœ ์žฌํ˜„ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

๊ต์ฐจ ํ…Œ์ŠคํŠธ ์ข…์†์„ฑ์„ ํ”ผํ•˜๋Š” ๊ฒƒ์€ ์ข…์ข… ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋•Œ๋กœ๋Š” ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๊ธ€๋กœ๋ฒŒ ์ƒํ˜ธ ์ž‘์šฉ์œผ๋กœ ์ธํ•ด ๋•Œ๋กœ๋Š” ํŽธ๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ชจ์นด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ์˜ 50 % ์ด์ƒ์ด ์ฃผ๋ฌธ์ด ๋ฌด์ž‘์œ„ ํ™”๋˜๋ฉด ํ…Œ์ŠคํŠธ ์‹คํŒจ๋ฅผ ๋ณด๊ฒŒ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์ˆœ์„œ์— ์˜์กดํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋Š” ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์ž…๋‹ˆ๋‹ค.

https://github.com/visionmedia/mocha/blob/master/test/hook.async.js#L95
https://github.com/visionmedia/superagent/blob/master/test/node/not-modified.js#L31

์ด ๋‘ ๊ฐ€์ง€๋Š” http://visionmedia.github.io/mocha/ ์— ์˜ˆ์ œ ํ…Œ์ŠคํŠธ ๋ชจ์Œ์œผ๋กœ ๋‚˜์—ด๋˜์–ด ์žˆ์œผ๋ฉฐ ๋ฌธ์ œ๋ฅผ ์ฐพ๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ์—ด์–ด ๋ณผ๊ฒŒ์š”. ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™์•„์š”. ๋„๊ตฌ์—†์ด ๊ต์ฐจ ํ…Œ์ŠคํŠธ deps๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ์ด๋ฅผ ์ž๋™ํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์‚ฌ๋žŒ๋“ค์˜ ์‹œ๊ฐ„์„ ์ ˆ์•ฝ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์œผ๋กœ ์•ฝ๊ฐ„ ๋†€์•„ ๋ณธ ํ›„์—๋Š” ์Šค์œ„ํŠธ์˜ ๊ณ„์ธต ์  ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ์‚ฌ์†Œํ•˜์ง€ ์•Š์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋Š” ์Šค์œ„ํŠธ๋กœ ๋ฐ˜๋ณตํ•˜์—ฌ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. _Tests_๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์—ด๊ฑฐํ•˜๊ณ  ๋ฌด์ž‘์œ„ ํ™” ํ•œ ๋‹ค์Œ ๊ฑฐ๊พธ๋กœ ์ž‘์—…ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด๋กœ ์ธํ•ด before() ๋ฐ after() Hooks๋Š” Suite์—์„œ _n_ ๋ฒˆ ํ…Œ์ŠคํŠธ ๋‹น _n_ ๋ฒˆ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์†Œ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค (๋˜๋Š” _worst_์˜ ๊ฒฝ์šฐ,ํ•˜์ง€๋งŒ ์‹ ์ค‘ํ•  ๊ฒฝ์šฐ์—๋งŒ) ), ์šฐ๋ฆฌ๋Š” ์ง€์†์ ์œผ๋กœ ์ปจํ…์ŠคํŠธ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž„์˜์˜ ์‹œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ž๋™ ์ƒ์„ฑ ๋œ ์‹œ๋“œ๋ฅผ๋ณด๊ณ ํ•˜๋Š” ๊ฒƒ์€ ์‚ฌ์†Œํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ๋ฆฌํฌํ„ฐ๋Š”์ด ์ •๋ณด์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฆฌํฌํ„ฐ์—์„œ ๊ตฌํ˜„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์—ฌ๊ธฐ์— ์„ค๋ช… ๋œ ๋‚ด์šฉ์ด ์š”์ฒญ ๋œ ๋‚ด์šฉ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์—๋Š” ์‚ฌ์–‘์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์˜ต์…˜์œผ๋กœ๋Š” "์Šค์œ„ํŠธ ๋žœ๋ค ํ™”"๋˜๋Š” "์Šค์œ„ํŠธ ๋‚ด ํ…Œ์ŠคํŠธ ๋žœ๋ค ํ™”"๋˜๋Š”์ด ๋‘˜์˜ ์กฐํ•ฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์งˆ์ ์œผ๋กœ ์ด๊ฒƒ์€ describe() describe() ๋ธ”๋ก _A_์— ์žˆ์œผ๋ฉด _A_์˜ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋  ๋•Œ๊นŒ์ง€ ๋ถ€๋ชจ ๋˜๋Š” ํ˜•์ œ before() / after() )์™€ ๊ด€๋ จํ•˜์—ฌ ๋ถˆํŽธ ํ•จ์„ ์œ ๋ฐœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ (๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด) ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

  • ๊ฐ€์žฅ ๋‚ฎ์€ ์ˆ˜์ค€์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ๋ฌด์ž‘์œ„ ํ™” : ๋‹จ์ผ ์„ค๋ช… ๋ธ”๋ก ๋‚ด์—์„œ; "๊ทธ๊ฒƒ"๋ฌธ์žฅ์„ ์„ž๋Š”๋‹ค.
  • ์ตœ์ƒ์œ„ ์ œํ’ˆ๊ตฐ์˜ ์ˆœ์„œ๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์ง€์ • (๋˜๋Š”๋กœ๋“œ๋˜๋Š” ํŒŒ์ผ์˜ ์ˆœ์„œ๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์ง€์ •)

๋‚˜๋Š” ์ค‘๊ฐ„ ์ˆ˜์ค€์—์„œ ๋ฌผ๊ฑด์„ ์„ž๋Š” ๋ฐ ๋งŽ์€ ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ™•์‹คํžˆ ํ•ดํ‚น์ด์ง€๋งŒ ๊ฐ€์žฅ ๋‚ฎ์€ ์ˆ˜์ค€์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค https://github.com/syrnick/mocha/compare/random_order?expand=1&w=0

mocha - fail
connect - pass
superagent - fail
express - pass** 
websocket.io - pass (can't tell for sure)

** ์–ด๋Š ์ชฝ์ด๋“  ์ „์ฒด ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ์˜ 100 ํšŒ ์‹คํ–‰ ์ค‘ 2 ๋ฒˆ์˜ ๊ฐ„ํ—์  ์ธ ์‹คํŒจ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋„ค, ํ™•์‹คํžˆ ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค!

๋‚˜๋Š” ์ด๊ฒƒ์„ ์œ„ํ•ด seedrandom lib๋ฅผ๋ณด๊ณ  ์žˆ์—ˆ๋‹ค; pass ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

PR์„ ๋ฐ›์•„ ๋“ค์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•ž์œผ๋กœ ๋ฉฐ์น  ๋™์•ˆ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ์กฐ์ •ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐ‘์ค„์ด ์ด๊ฒƒ์— ๋Œ€ํ•œ ์˜์กด์„ฑ์ด ๋„ˆ๋ฌด ๋ฌด๊ฒ์Šต๋‹ˆ๊นŒ? http://stackoverflow.com/questions/6274339/how-can-i-shuffle-an-array-in-javascript ์™€ ๊ฐ™์€ ๊ฐ€๋ฒผ์šด ๊ฒƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

@boneskull ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋‹ค์‹œ ์—ฌ๋Š” ๋‹น์‹ ์˜ ๊ฒฐ์ •์„์ง€์ง€ํ•ฉ๋‹ˆ๋‹ค. : +1 :

๋‹ค๋ฅธ ์˜ต์…˜์œผ๋กœ๋Š” "์Šค์œ„ํŠธ ๋žœ๋ค ํ™”"๋˜๋Š” "์Šค์œ„ํŠธ ๋‚ด ํ…Œ์ŠคํŠธ ๋žœ๋ค ํ™”"๋˜๋Š”์ด ๋‘˜์˜ ์กฐํ•ฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋ฅผ ์œ„ํ•ด ์ถฉ๋ถ„ํžˆ ์ข‹์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋๊นŒ์ง€ ๋ฐ˜๋ณตํ•ด์„œ ์—ด๊ฑฐํ•˜๊ณ  ์„ž์„ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋“ค์–ด๊ฐ„๋‹ค๋Š” ์†Œ์‹์„ ๋“ค์œผ๋‹ˆ ๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค.

rspec์ด ์žฌ๊ท€ ์…”ํ”Œ์„ ์ฒ˜๋ฆฌํ–ˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋ณผ ๊ฐ€์น˜๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
๊ทธ๋“ค์˜ ์ฝ”๋“œ์—์„œ?

2014 ๋…„ 8 ์›” 26 ์ผ ํ™”์š”์ผ์— Joshua Appelman [email protected]
์ผ๋‹ค :

@boneskull https://github.com/boneskull ๊ท€ํ•˜์˜ ๊ฒฐ์ •์„์ง€์ง€ํ•ฉ๋‹ˆ๋‹ค.
์ด๊ฒƒ์„ ๋‹ค์‹œ์—ฌ์‹ญ์‹œ์˜ค. [์ด๋ฏธ์ง€ : : +1 :]

๋‹ค๋ฅธ ์˜ต์…˜์—๋Š” "์Šค์œ„ํŠธ ๋ฌด์ž‘์œ„ ํ™”"๋˜๋Š” "๋‚ด๋ถ€ ํ…Œ์ŠคํŠธ ๋ฌด์ž‘์œ„ ํ™”
์Šค์œ„ํŠธ "๋˜๋Š”์ด ๋‘˜์˜ ์กฐํ•ฉ.

๋‚˜๋ฅผ ์œ„ํ•ด ์ถฉ๋ถ„ํžˆ ์ข‹์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋๊นŒ์ง€ ๋ฐ˜๋ณต ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
์—ด๊ฑฐํ•˜๊ณ  ์„ž์Šต๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/visionmedia/mocha/issues/902#issuecomment -53482124.

@syrnick ๋‚˜๋Š” ๊ทธ๋ ‡๊ฒŒ ํฐ ์˜์กด์„ฑ์„ ๊ฐ€์ง„ PR์„ ๋ฐ›์•„๋“ค์ด๊ณ  ์‹ถ์ง€ ์•Š๊ณ  ๋Œ€์‹  seedrandom ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ ์—†์ด๋Š” ์–ด๋–ป๊ฒŒ ์”จ ๋ฟŒ๋ฆฌ๊ธฐ๋ฅผ ์ง€์›ํ•  ๊ฒƒ์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. seedrandom ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ๋“œ๋ฅผ ์ง€์ •ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์‹œ๋“œ๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œํ•˜๊ณ  RSpec์„ ์ง€์ •ํ•˜๋„๋ก ํ—ˆ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@syrnick ์‹œ๋“œ๋ฅผ ์ƒ์„ฑ ํ•  ๊ฒฝ์šฐ ๊ธฐ์ž์—๊ฒŒ ์ „๋‹ฌํ•˜์ง€ ์•Š๊ณ ๋Š” "ํ‘œ์‹œ ํ•  ์ˆ˜"์—†์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด๊ณ  ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด ์ž˜ ์•Œ์ง€ ๋ชปํ•ด์„œ ์–ด๋–ป๊ฒŒํ•ด์•ผํ•˜๋Š”์ง€ ํ™•์‹คํžˆ ๋งํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

+1

๋‚˜๋Š” ๊ตฌํ˜„์„ ๋ณด์ง€ ์•Š์•˜์ง€๋งŒ ๋ฌด์ž‘์œ„๋กœ ์ •๋ ฌ ๋œ ํ…Œ์ŠคํŠธ ์‹คํ–‰์— +1์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

@syrnick ์ด ์ผ์„ ํ•  ์ƒ๊ฐ์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ฒŒํ•ด์„œ ๊ธฐ์˜์ง€๋งŒ ๋‹น์žฅ ETA๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

: +1 : ์•„์ง PR์— ๋„์›€์ด ํ•„์š” ํ•˜์‹ ๊ฐ€์š”?

์‹ค์ œ๋กœ ์•„๋ฌด๋„ ์ด๊ฒƒ์— ๋Œ€ํ•ด ์ž‘์—…์„ ์‹œ์ž‘ํ•˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ฒซ์งธ, Fisher-Yates ์…”ํ”Œ์ด ์—ฌ๊ธฐ์„œ ์ผ์„ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‘˜์งธ, --order random , --order random-suites , --order default ๋ฅผ ์„ ํƒ์ ์ธ :<seed> ์™€ ํ•จ๊ป˜ 3 ๊ฐœ์˜ ์ธ์ˆ˜๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

+1. ํ…Œ์ŠคํŠธ๊ฐ€ ๋ฌด์ž‘์œ„๋กœ ์ถ”์ถœ๋˜๋ฉด ์˜ค๋ž˜ ์ „์— ๋‚˜ํƒ€ ๋‚ฌ์„ ๋ฒ„๊ทธ๋ฅผ ๋ฐฉ๊ธˆ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. RSpec์ด ์ง€์›ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋ฌด์ž‘์œ„ ํ…Œ์ŠคํŠธ ์ˆœ์„œ์˜ ์œ ์šฉ์„ฑ์„ ๋ณด์—ฌ์ฃผ๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ๋” ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๊ฐ€ ์žˆ์ง€๋งŒ ์ด๊ฒƒ์€ TDD ๋ฐ๋ชจ์—์„œ ๋ฐฉ๊ธˆ ๋งŒ๋‚œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ˆœ์„œ๋ฅผ ๋ฐ˜๋Œ€๋กœํ•˜๋ฉด ์ฒซ ๋ฒˆ์งธ ํ…Œ์ŠคํŠธ๋Š” ํ•ญ์ƒ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

game.js :

var express = require('express');
app = exports.app = express();

var sum = 0;

app.post('/bowl/:pins', function(req,res) {
    var score = parseInt(req.params.pins);
    console.log('Bowled ' + score);
    sum += parseInt(req.params.pins);
});

app.get('/score', function(req,res) {
    console.log('Sum: ' + sum);
    res.send(sum + '');
});

app.listen(process.env.PORT || 3000);

test \ gameTest.js :

var request = require('supertest'),
    should = require('should'),
    game = require('../game.js').app;

describe('a game of bowling', function() {
    describe('a gutter game', function() {
        it('should score 0', function(done){
            request(game).get('/score').expect(200, '0', done);
        });
    });

    describe('a single pin game', function() {
        it('should score 20', function(done){
            for(var i = 0; i < 20; i++) {
                request(game).post('/bowl/1').expect(200, done);
            }
            request(game).get('/score').expect(200, '20', done); 
        });
    });
});

๋‚˜๋Š” ์ด๊ฒƒ์„ ๊ฐ–๊ณ  ์‹ถ๋‹ค.

: +1 :

๋ช‡ ๊ฐ€์ง€ ์ „์—ญ์„ ํฌํ•จํ•˜๊ณ  (Javascript์ž…๋‹ˆ๋‹ค. ๊ธฐ์–ตํ•˜์„ธ์š”) ์„œ๋ฒ„ ํ˜ธ์ถœ์„ ์Šคํ„ฐ ๋น™ํ•˜๊ณ  ํ…Œ์ŠคํŠธ์—์„œ DOM์—์„œ ํ•ญ๋ชฉ์„ ์‚ฝ์ž… / ์ œ๊ฑฐํ•˜๋ฉด ์ฃผ๋ฌธ ์ข…์†์„ฑ์„ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ˆœ์„œ๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์ง€์ •ํ•˜๋ฉด ๋‚˜์ค‘์—๋ณด๋‹ค๋Š” ์ผ์ฐ ๋ฐœ๊ฒฌํ•˜๋Š” ๋ฐ ๋„์›€์ด๋ฉ๋‹ˆ๋‹ค.
: +1 :

: +1 :

: +1 :

+1

๊ธฐ๋ณธ์ ์œผ๋กœ ์ž„์˜ ์ˆœ์„œ, ์ˆœ์„œ๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๊ธฐ์œ„ํ•œ ์„ ํƒ์  ์‹œ๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ์ข‹์€ ๊ธฐ๋Šฅ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

+1ํ•˜๋ ค๋ฉด ๋‚ด ํ…Œ์ŠคํŠธ๊ฐ€ ์ž„์˜์˜ ์ˆœ์„œ๋กœ ์‹คํ–‰๋  ๋•Œ ๊ฐ€๋” ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค ...

๊ทธ๋™์•ˆ ์œ ๋‹‰์Šค๋ฅผ ๊ตฌ์ถœํ•˜์‹ญ์‹œ์˜ค (์•ˆํƒ€๊น๊ฒŒ๋„ ์ž„์˜์˜ ์‹œ๋“œ๋Š” ์ง€์›๋˜์ง€ ์•Š์Œ) :

mocha `ls -1 test/*.js | sort --random-sort `

mocha๊ฐ€ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ˆœ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ด๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌด์ž‘์œ„ ํ™”๊ฐ€์—†๋Š” ๊ฒฝ์šฐ ๊ธฐ๋ณธ ์‹คํ–‰ ์ˆœ์„œ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ํ•ญ์ƒ ํ…Œ์ŠคํŠธ๊ฐ€ ํŒŒ์ผ์— ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ์ˆœ์„œ์ž…๋‹ˆ๊นŒ?

: +1 :

@danielabar ์˜ˆ ๊ทธ๋“ค์€ ํŒŒ์ผ์— ๋‚˜ํƒ€๋‚˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@NicolasJacob ์Œ , ๋ฌด์ž‘์œ„ ์‹œ๋“œ๋Š” ์‹ค์ œ๋กœ ์–ด๋Š ์ •๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. :)

$ seq 10 | shuf --random-source=<(yes 2883)
1
7
3
4
6
2
10
5
9
8

https://github.com/bahmutov/rocha ๊ฐ€์ด๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

@boneskull ์ด ์˜ค๋ž˜๋œ ๋ฌธ์ œ์ด์ง€๋งŒ PR Please ๋ ˆ์ด๋ธ”์ด ์—ฌ์ „ํžˆ ์œ ํšจํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ๋‹ค์Œ ๋‚  ์ •๋„์— ๊ธฐ๋ถ€๊ธˆ์„๋ฐ›์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ ๋ชจ์นด ์ฝ”์–ด๋ฅผ ์ตœ์†Œํ•œ์œผ๋กœ ์œ ์ง€ํ•˜๋ ค๋Š” ๋…ธ๋ ฅ์—์„œ ํŒ€์€ ๋งŽ์€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์„ ์ฃผ์ € ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. mocha์˜ ๋‹ค์Œ ์ฃผ์š” ๋ฆด๋ฆฌ์Šค๋Š” ํ”Œ๋Ÿฌ๊ทธ ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœํ•ฉ๋‹ˆ๋‹ค.

์ž‘๋™ํ•œ๋‹ค๋ฉด https://github.com/bahmutov/rocha๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ต‰์žฅํ•œ ์†Œ์Šค

ํ”Œ๋Ÿฌ๊ทธ ํ˜• ์ธํ„ฐํŽ˜์ด์Šค ๋ž€ ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋ฌด์ž‘์œ„ ํ…Œ์ŠคํŠธ ์ˆœ์„œ๋ฅผ ๋„์ž… ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ธฐ๋Šฅ ์š”์ฒญ์— ๋Œ€ํ•œ +1

@sulabhjain , ์ด์ „ ๋ฐ ๋‹ค์Œ ์ง€์ง€์ž๋“ค์€ ๋Œ€์‹  +1 ๋ฐ˜์‘์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ +1

์ด๊ฒƒ์€ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„ ์›Œํฌ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด๋˜๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์ฃผ์š” JVM ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„ ์›Œํฌ์—๋Š”์ด ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ +1์ž…๋‹ˆ๋‹ค. ์˜ˆ, ์ถฉ๋ถ„ํ•œ ๊ฒฝํ—˜ ๋ฐ / ๋˜๋Š” ๋‹จ๋…์œผ๋กœ ์ž‘์—…ํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ข…์†์„ฑ์„ ํ”ผํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์ง€๋งŒ ํ•ญ์ƒ ๊ทธ๋Ÿฐ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์— ๊ด€์‹ฌ์ด์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๋ฌด์ž‘์œ„ ๋ถ„๊ธฐ ์— ๋Œ€ํ•ด PR์„ ๋ณด๋‚ด ๋‚จ์€ ๊ฒƒ์„ ์™„๋ฃŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ์— +1. ์ด๋ฅผ ์œ„ํ•ด ๋ถ„๊ธฐ๊ฐ€ ์ง„ํ–‰ ์ค‘์ด๋ผ๋Š” ์ ์— ์ง„์‹ฌ์œผ๋กœ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์•„์ง๋„ ์ด๊ฒƒ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค :))

์ด๊ฒƒ์€ ์ •๋ง ์œ ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
@tj ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๊ธฐ์ˆ ์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ๋“ค๊ณผ ํ•จ๊ป˜ ์ž‘์—… ํ•  ๋•Œ ํ…Œ์ŠคํŠธ ์ข…์†์„ฑ์„ ํ”ผํ•˜๋Š” ๊ฒƒ์ด ์‰ฝ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ๋•Œ๋กœ๋Š” ๊ฐœ๋ฐœ ํŒ€์„ ์ธ์ˆ˜ํ•ด์•ผํ•˜๊ณ  ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ง€์‹์กฐ์ฐจ์—†๋Š” ์‚ฌ๋žŒ๋“ค๊ณผ ์ถฉ๋Œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์ด๊ฒƒ์€ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ๋ฅผ ์ธ์ˆ˜ํ•˜๊ณ  ํ•˜๋‚˜์˜ ํ…Œ์ŠคํŠธ๊ฐ€ ์ด์ „ ํ”„๋กœ์ ํŠธ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ์‰ฝ๊ฒŒ ํ™•์ธํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์—๋„ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

@boneskull ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค! ์ด ์ˆ˜์ •์˜ ์ƒํƒœ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋„์›€์ด ํ•„์š”ํ•˜์‹ญ๋‹ˆ๊นŒ?

๋ชจ์นด ํ…Œ์ŠคํŠธ๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์ž„์‹œ ์†”๋ฃจ์…˜์„ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ์œ ์šฉ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

mocha $(find tests/ -name *.spec.js | shuf)

๋ถˆํ–‰ํžˆ๋„ ๋™์ผํ•œ ์˜ˆ์ œ ๋‚ด์—์„œ ํ…Œ์ŠคํŠธ ์˜ˆ์ œ๋ฅผ ์„ž์ง€ ์•Š์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ฝค ์˜๋ฆฌํ•˜๊ณ  ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค!

์ด ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” +1

์ด๊ฑด ์•„์ง ํƒ์ž ์œ„์— ์žˆ์ง€๋งŒ ๋‚ด๊ฐ€ ์•„๋‹Œ ์‚ฌ๋žŒ์˜์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค

๊ทธ๋ž˜์„œ ์‹ค์ œ๋กœ ์—ฌ๊ธฐ์— ๋ฌด์—‡์ด ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๊นŒ? ์–ด๋””์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ตฌํ˜„ ๋œ โค๏ธ๋ณด๊ณ  ์‹ถ์–ด์š”

๋ฐฉ๊ธˆ choma ํŒจํ‚ค์ง€๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.์ด ํŒจํ‚ค์ง€๋Š” Mocha๊ฐ€ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ์™€ ์ผ€์ด์Šค์˜ ์ˆœ์„œ๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์ง€์ •ํ•  ์ˆ˜์žˆ๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์•ž์„œ ์–ธ๊ธ‰ ํ•œ rocha์˜ ์ข‹์€ ๋Œ€์•ˆ. ๊ฐ„๋‹จํ•˜๊ณ  ๋‚˜๋ฅผ ์œ„ํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค!

๋Œ€์•ˆ์€ ํ…Œ์ŠคํŠธ๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • Karma (+ mocha ๋˜๋Š” jasmine) -karma-parallel- ํ˜„์žฌ ์ฝ”๋“œ ์ ์šฉ ๋ฒ”์œ„๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • Mocha- mocha-parallel-tests ๋˜๋Š” mocha.parallel
  • Jest-๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆ˜ํ–‰
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰