Jest: RequireJS ์ง€์›

์— ๋งŒ๋“  2014๋…„ 05์›” 15์ผ  ยท  84์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: facebook/jest

๋‚ด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ•œ๋‹ค๋ฉด ํ˜„์žฌ CommonJS ์Šคํƒ€์ผ require()๊ฐ€ ์•„๋‹Œ RequireJS์™€ ํ•จ๊ป˜ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. RequireJS์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•  ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์‹ฌ์ง€์–ด ์‹คํ˜„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ?

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

babel-plugin-transform-amd-to-commonjs ๋Š” ํŠนํžˆ babel-jest์™€ ๊ฐ™์€ ๊ฒƒ์„ ์ด๋ฏธ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ Jest+AMD ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ๋ณ€ํ™˜์„ ์‹คํ–‰ํ•˜์—ฌ Jest๊ฐ€ AMD ํŒŒ์ผ์„ ํˆฌ๋ช…ํ•˜๊ฒŒ ์š”๊ตฌํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์ œ ํ”„๋กœ์ ํŠธ ๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ ์ด๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์ด ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŠนํžˆ Jest/RequireJS/Webpack/etc ๊ฐ„์˜ ๊ตฌ์„ฑ ๊ณต์œ ์— ๋Œ€ํ•œ ์ข‹์€ ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. .js ๊ตฌ์„ฑ ํŒŒ์ผ์— ๋Œ€ํ•œ Jest ์ง€์›์€ ๋ณด๋‹ค ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์„ ํ–ฅํ•œ ๋‹จ๊ณ„๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค(https://github.com/facebook/jest/issues/2140 ์ฐธ์กฐ).

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

++

Jest์— ๋Œ€ํ•œ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ(์˜ˆ: require.js, es6 ๋ชจ๋“ˆ ๋“ฑ)์„ ์ง€์›ํ•˜๋Š” ๋กœ๋“œ๋งต์— ์žˆ์ง€๋งŒ ๋ถˆํ–‰ํžˆ๋„ ์•„์ง ๊ฑฐ๊ธฐ๊นŒ์ง€๋Š” ๋„๋‹ฌํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ง„ํ–‰ ์ƒํ™ฉ์„ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ์ด ๋ฌธ์ œ๋ฅผ ์—ด์–ด ๋‘ก๋‹ˆ๋‹ค. require.js ๋กœ๋”๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@jeffmo ์›นํŒฉ ์€ commonjs/es6/amd๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋†๋‹ด์„ ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์•„๋งˆ ๊ทธ ๋ชจ๋“  ๊ฒƒ์„ ๋ฌด๋ฃŒ๋กœ ์–ป์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

++

์šฐ๋ฆฌ๋Š” ํฐ ์กฐ์ง์— ๋งŽ์€ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ๊ณ  jest๋ฅผ ์‚ฌ์šฉํ•  ๊ณ„ํš์ด์ง€๋งŒ 100% requirejs์ž…๋‹ˆ๋‹ค. requirejs ํ†ตํ•ฉ์— ๋Œ€ํ•œ ๋ชจ๋“  ์˜ˆ์ƒ?

++

๋†๋‹ด๋„ ํ•ด๋ณด๊ณ  ์‹ถ์ง€๋งŒ ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ๋Š” RequireJS๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

:+1:

๋ˆ„๊ตฐ๊ฐ€ ์ด๊ฒƒ์„ ์‹ฌ์œผ๋กœ ์‚ฌ์šฉํ•˜์ž๊ณ  ์ œ์•ˆํ–ˆ๋Š”๋ฐ ์•„๋ฌด๋„ ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๊นŒ?

https://github.com/Jakobo/redefine

_์ฃผ์˜ ์‚ฌํ•ญ์œผ๋กœ ๊ฐ€๋Šฅ_. ์ž„์‹œ๋ฐฉํŽธ ์œผ๋กœ ํŠธ๋ฆญ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž„์˜์˜ ์ €์žฅ์†Œ ์—์„œ nodefy ๋กœ ์•ฝ๊ฐ„์˜ ๋นŒ๋“œ๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€ ์•„๋ž˜์˜ scripts.cjs๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

Litmus ํ…Œ์ŠคํŠธ: AMD ๋ชจ๋“ˆ ๋ณ„์นญ์€ node_modules ์•„๋ž˜์˜ ํ•ด๋‹น ๋ชจ๋“ˆ๊ณผ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค . ๋ฆฌํŠธ๋จธ์Šค ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ–ˆ์ง€๋งŒ ์ ˆ๋ง์ ์ด๋ผ๋ฉด ์ˆœ์ˆ˜ AMD ๋ชจ๋“ˆ์„ nodefyํ•˜๊ฑฐ๋‚˜ node_modules์— ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ ์•„์ด๋””์–ด๋Š” ๋‚˜๋ฅผ ์Šฌํ”„๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ๊ด€์ ์—์„œ, ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์™ธ๋ถ€ ์žฅ์น˜๋Š” UMD๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ๋‚ด AMD ๋ณ„์นญ๊ณผ ์ผ์น˜ํ•˜๋Š” ์ด๋ฆ„์— npm์œผ๋กœ ์„ค์น˜ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํฐ ๋ฌธ์ œ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

(๋‚˜๋Š” nodefy ์ „์— uRequire๋ฅผ ์ฒดํฌ ์•„์›ƒํ–ˆ์ง€๋งŒ CommonJS ํ…œํ”Œ๋ฆฟ ์€ ๊ธฐ๋Šฅ์ ์œผ๋กœ nodefy์™€ ๋™์ผํ•˜๊ฒŒ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์ƒ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. amdefine๋„ ํ™•์ธํ–ˆ์ง€๋งŒ jest๋Š” 'require'์—์„œ ์ •๊ทœ์‹ ์ผ์น˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ต๋ช…์˜ AMD๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ญ์ƒ UMD๊ฐ€ ์žˆ์ง€๋งŒ document ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ํฉ์–ด์ ธ ์žˆ๋Š” UMD๋ฅผ ์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์€ ๋งค๋„ˆ๊ฐ€ ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

+1

++

์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ์ƒˆ๋กœ์šด ํด๋ผ์ด์–ธํŠธ ์ธก ์ฝ”๋“œ์—์„œ react, backbone ๋ฐ requirejs๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋†๋‹ด์„ ์‚ฌ์šฉํ•˜๊ณ  ๋ฐ˜์‘ ํ…Œ์ŠคํŠธ์˜ ๊ณ ํ†ต์„ ์™„ํ™”ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋‹จ์œ„ ์ˆ˜์ค€์œผ๋กœ ๋ฌผ๊ฑด์„ ๋‚ฎ์ถ”๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฐ˜์‘ ์ฝ”๋“œ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋Š” rspec ๋ฐ webdriver๋กœ ์ˆ˜ํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ž‘๋™ํ•˜๋Š” ๋™์•ˆ ๋ช…๋ฐฑํ•œ ์ด์œ ๋กœ ์ด์ƒ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•„์ง ์‹ค์šฉ์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ๊ฒช๊ณ  ์žˆ๋Š” ์ฃผ์š” ๋ฌธ์ œ๋Š” ๋ฐ˜์‘ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ž˜ํ•‘ํ•˜๋Š” ์ •์˜ ๋ฌธ์ž…๋‹ˆ๋‹ค.

+1

@petehunt ์ €๋ฅผ Webpack์œผ๋กœ

+1

๋ˆ„๊ตฐ๊ฐ€ ์ฝ”๋“œ ์ ์šฉ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ € ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” jasmine/webpack ๋˜๋Š” jest/webpack์˜ ์˜ˆ๋ฅผ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

++

์šฐ๋ฆฌ๋Š” ์–ธ์ œ requirejs์— ๋Œ€ํ•œ ์ง€์›์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

+1

+1

+1

+1

+1

+1

์ •์˜ ํ˜ธ์ถœ์— ๋Œ€ํ•ด return ๋Œ€์‹  module.exports๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ์ „์ฒ˜๋ฆฌ๊ธฐ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค :์—„์ง€์†๊ฐ€๋ฝ:

// preprocessor.js
var ReactTools = require('react-tools');
module.exports = {
  process: function(src) {
    if (/define\(.*?\{/.test(src)) {
      //Remove AMD ceremony for use without require.js or almond.js
      src = src.replace(/define\(.*?\{/, '')
        .replace(/(}\);|}\))$/,'');
    }

    return ReactTools.transform(src);
  }
};

++

+1

+1

RequireJS ์ง€์› +1

+1

@charliedowler ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์กฐ๊ธˆ ๋”

if (typeof(module) == 'object' && module.exports) { module.exports = <my_element>;  }

๊ทธ๋Ÿฌ๋‚˜ return ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ „์ฒ˜๋ฆฌ๊ธฐ์—์„œ ํŒŒ์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋งˆ์ง€๋ง‰ ๋ฐ˜ํ™˜๊ณผ ์ผ์น˜ํ•˜๋„๋ก RegEx๋ฅผ ํ™•์žฅํ•˜์—ฌ ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ „ํ˜€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. "๋ถˆ๋ฒ• ๋ฐ˜ํ’ˆ ๋ช…์„ธ์„œ" ์˜ค๋ฅ˜๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ํ‘œํ˜„์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

if (/define\(.*?\{/.test(src)) {
  src = src.replace(/(define\(.*?\{|return.*[\s]}\);?$)/g,'');  
}

src ๋ฅผ stdout์— ์“ฐ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ„๋‹จํ•œ console.log๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ, ์ด ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ข…์†์„ฑ์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด React?

+1

์•„! ๋‚˜๋Š” (๊ทธ๋ฆฌ๊ณ  ๋งค์šฐ ์ฆ๊ฒ๊ฒŒ ๋†๋‹ด์„) ๊ฐ€์ง€๊ณ  ๋†€๊ณ  ์žˆ์—ˆ๋‹ค. ์˜ค๋Š˜ ์‹ค์ œ ํ”„๋กœ์ ํŠธ๋กœ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ํ˜„์žฌ ๋ชจ๋“  "์‹ค์ œ" ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ requireJS ์ง€์› :sob: ... ๊ฑฐ๋ž˜ ์ฐจ๋‹จ๊ธฐ๊ฐ€ ์—†์Œ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฐธ์œผ๋กœ ์Šฌํ”„๋‹ค. ํ™•์‹คํžˆ ํฅ๋ฏธ๋กœ์šด ์•„์ด๋””์–ด์˜€์Šต๋‹ˆ๋‹ค!

:+1:

+1

+1

:+1:

:์—„์ง€์†๊ฐ€๋ฝ:

:+1:

:+1:

๊ทธ๋ž˜์„œ ์›นํŒฉ์„ ์‚ฌ์šฉํ•˜์—ฌ AMD ๋ชจ๋“ˆ๊ณผ ํ…Œ์ŠคํŠธ๋ฅผ ํ•จ๊ป˜ ์ปดํŒŒ์ผํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์ถ”๊ฐ€ ๋กœ๋”๋ฅผ ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. https://github.com/ninjapanzer/Backbone-Flux-React-Webpack

:+1:

+1

+1

+1

์ด ๋ฌธ์ œ๋ฅผ ์‹ ๊ณ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•˜๊ณ  ์–‘ํ•ดํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•ต์‹ฌ ํŒ€์— ์•Œ๋ ธ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ 30์ผ ์ด๋‚ด์— ๋‹ต๋ณ€์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์œผ๋ฉฐ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฌธ์ œ๊ฐ€ ์ข…๋ฃŒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

+1

@facebook-github-bot-4 ํ•ด์ฃผ์„ธ์š”!

+1

+1

++

Webpack์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด Jest์˜ 'HasteModuleLoader'๋ฅผ ๋Œ€์ฒดํ•˜๋Š” Jestpack์— ๋Œ€ํ•ด ์ž‘์—…ํ•ด ์™”์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ AMD๋ฅผ ํฌํ•จํ•˜์—ฌ Webpack์ด ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ Jestpack์˜ ์„ฑ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐ ์ •๋ง ์œ ์šฉํ•œ FB ์Šคํƒ€์ผ์˜ ์„œ๋‘˜๋Ÿฌ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ ์™ธ์— Jest๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€๊ทœ๋ชจ(ish) ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ์•„๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋˜ํ•œ jest-requirejs ํ”„๋กœ์ ํŠธ main.js ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๋ถ„์„ํ•œ ๋‹ค์Œ deamdify ์„ ์ œ๊ฑฐํ•˜๋Š” define ๋ž˜ํผ๋Š” main.js์˜ ์ง€์ •๋œ baseUrl ๋ฐ ๊ฒฝ๋กœ์˜ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•„์ˆ˜ ๊ฒฝ๋กœ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•œ ๋‹ค์Œ ๋ณ€ํ™˜๋œ ํŒŒ์ผ์„ ํ‰์†Œ์™€ ๊ฐ™์ด jest์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

์—ฌ์ „ํžˆ ํ”Œ๋Ÿฌ๊ทธ์ธ/๋กœ๋” ๊ตฌ๋ฌธ์— ๋Œ€ํ•ด ์ž‘์—… ์ค‘์ด๋ฉฐ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ๋‚ด์—์„œ jest.dontMock("") , jest.setMock("") ๋ฐ require.requireActual("") ๊ฒฝ๋กœ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

์–˜๋“ค์•„ ์ด๊ฑฐ ์ง„์งœ ๋Œ€๋ฐ•์ด๋‹ค. ์ €๋Š” Jestpack์˜ ์•„์ด๋””์–ด๊ฐ€ ๋งˆ์Œ์— ๋“ค๊ณ  ์ถ”๊ฐ€ ๋ชจ๋“ˆ ํ•ด์„๊ธฐ๋ฅผ ํ›จ์”ฌ ์‰ฝ๊ฒŒ ์ง€์›ํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์›น์‚ฌ์ดํŠธ๋ฅผ ๊ฐœํŽธํ•˜๊ณ  ์‹œ์ž‘ํ•˜๊ธฐ ๊ฐ€์ด๋“œ์˜ ์ผ๋ถ€๋กœ Jestpack๊ณผ ๊ฐ™์€ ์†”๋ฃจ์…˜์„ ์ถ”์ฒœํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. @richardscarrott ๋ฐ @sterpe ํ•„์š”ํ•œ ๊ฒƒ์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

๋˜ํ•œ cc @mwolson ๋ฐ @ColCh

(๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์—๊ฒŒ: ๋Œ“๊ธ€์— ์ฐฌ์„ฑ ํˆฌํ‘œ๋ฅผ ์ค‘์ง€ํ•˜์„ธ์š”. ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋†๋‹ด์„ ์œ„ํ•ด ๋นŒ๋“œ๋œ ๊ฒƒ์„ ์›ํ•˜๋ฉด ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ์„ ๋ณด๋‚ด์‹ญ์‹œ์˜ค. ์ฝ”๋“œ๊ฐ€ ๋…ผ์Ÿ์„ ์ด๊น๋‹ˆ๋‹ค! ๊ฐœ์ธ์ ์œผ๋กœ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์‚ฌ๋žŒ๋“ค์ด ๊ธฐ๋Šฅ์„ ํ•„์š”๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋Šฅ์˜ ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์— ์žˆ๋Š” _๋ชจ๋“  ๋ชจ๋“ˆ ๋กœ๋”_๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.).

Jestpack์€ ํฅ๋ฏธ๋กญ์ง€๋งŒ ํ…Œ์ŠคํŠธ๋‹น ํ•˜๋‚˜์˜ ์ง„์ž…์ ์„ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š” ํŒฌ์€ ์•„๋‹™๋‹ˆ๋‹ค. https://github.com/Ticketmaster/jest-webpack-alias ๋Š” ์›นํŒฉ์˜ ๋ชจ๋“ˆ ํ™•์ธ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜์—ฌ ์ผ๋ถ€ ์ „์ฒ˜๋ฆฌ ๋ฐ ์•„์ง ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์€ ๋ฒ„๊ทธ๋ฅผ ํฌ์ƒํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ์ข€ ๋” ์ผ๋ฐ˜์ ์œผ๋กœ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์‹œ์ž‘ํ•˜๊ธฐ ๊ฐ€์ด๋“œ์—์„œ๋Š” ์ „์ฒ˜๋ฆฌ๊ธฐ๊ฐ€ ์‹คํ–‰๋˜๋Š” ํŒŒ์ผ์„ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค(์žˆ๋Š” ๊ฒฝ์šฐ). ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์†๋„๊ฐ€ ์ƒ๋‹นํžˆ ๋Š๋ ค์ง‘๋‹ˆ๋‹ค.

์ „์ฒ˜๋ฆฌ๊ธฐ๋Š” ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋ฉฐ ์บ์‹œ ํ‚ค ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. jest๋Š” ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ „์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿด ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ฒซ ๋ฒˆ์งธ ์‹คํ–‰๋งŒ์œผ๋กœ๋„ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ์‹คํ–‰์— ์•ฝ 10์ดˆ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋น ๋ฅด์ง€ ์•Š๋‹ค๋Š” ๋ฐ ๋™์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. FB์—์„œ ์ฒซ ๋ฒˆ์งธ ์‹คํ–‰์€ ํ›„์† ์‹คํ–‰๋ณด๋‹ค ๊ฑฐ์˜ ๋‘ ๋ฐฐ๋‚˜ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ์ง€๋งŒ ๊ฐœ์ธ์ ์œผ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. FB์—์„œ babel ๋ฐ ๊ธฐํƒ€ ์‚ฌ์šฉ์ž ์ง€์ • ๋ณ€ํ™˜์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒ˜๋ฆฌ๊ธฐ ์—†์ด ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค :)

์ „์ฒ˜๋ฆฌ๊ธฐ ์บ์‹ฑ์€ requirejs ์ „์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๋™์•ˆ ์ €๋ฅผ ๋ฌผ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋Œ€๋ถ€๋ถ„ ์—ฌ์ „ํžˆ ์บ์‹ฑ์ด ์—†๋Š” [email protected] ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

0.5์—์„œ ์ž˜ ์ž‘๋™ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค!

Webpack์€ dev-watch ๋ชจ๋“œ์—์„œ ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค.

์™œ๋ƒํ•˜๋ฉด:

  1. Webpack์€ ๋Ÿฐํƒ€์ž„์„ ๋ฉ”๋ชจ๋ฆฌ์— ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค(๋‹ค์‹œ ๋กœ๋“œํ•˜์ง€ ์•Š์Œ).
  2. ์ปดํŒŒ์ผ๋œ ์†Œ์Šค ์ฝ”๋“œ๋„ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ œ Jest ์ „์ฒ˜๋ฆฌ๊ธฐ์—์„œ๋Š” (2) ํฌ์ธํŠธ๋งŒ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ Jest ๋ฐ Webpack ์œ„์— ์žˆ๋Š” ํŒจํ‚ค์ง€( ๋ฉ”๋ชจ๋ฆฌ FS ์—์„œ ์ปดํŒŒ์ผํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ FS ์—์„œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒŒ ์ œ ๊ด€์ ์ž…๋‹ˆ๋‹ค...

๊ทธ๋Ÿฌ๋‚˜ ์ง€๊ธˆ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ FS ๋ฅผ Jest ์— ์ฃผ์ž…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ปดํŒŒ์ผ๋œ ์†Œ์Šค๋ฅผ ์บ์‹œ์— ๋ฐ”๋กœ ์ฃผ์ž…ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ์ธ Jest ์บ์‹œ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•ดํ‚น ์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์—ฌ๊ธฐ์—์„œ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค. jest-webpack/issues/4#issuecomment-98623189

์•„, Webpack ์„ ์ „์ฒ˜๋ฆฌ Karma ๋„ ๋งค์šฐ ๋Š๋ฆฌ๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฃผ์š” ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ํŒŒ์ผ ๊ฐ„์˜ webpack ๋Ÿฐํƒ€์ž„ ์žฌ๋กœ๋“œ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@cpojer ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ด๋ฏธ ์„ ํƒ๋˜์–ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ตญ ๋ชจ๋“ˆ ๋กœ๋”๋ฅผ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋‹น์‹ ์˜ ์˜๋„๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— Jestpack์œผ๋กœ ๊ทธ๊ฒƒ์„ ์ฐ”๋Ÿฌ ์ค„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งŒ๋‚œ ์œ ์ผํ•œ ์ง„์งœ ๋ฌธ์ œ๋Š” node_modules https://github.com/facebook/jest/issues/509 ์— ๋Œ€ํ•œ ์ˆ˜๋™ ๋ชจ์˜๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ธฐ ์œ„ํ•œ ๋…ผ๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฒฐ๊ตญ ๋‚˜์—๊ฒŒ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ์ง€๋งŒ ๋งŒ์•ฝ ๋‹น์‹ ์ด Jestpack์˜ ๋ชจ๋“ˆ ๋กœ๋”๋ฅผ HasteModuleLoader์™€ ์ •๋ ฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@mwolson Jestpack ์ด ํ…Œ์ŠคํŠธ ํŒŒ์ผ๋งˆ๋‹ค ๋ณ„๋„์˜ ์ง„์ž…์ ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” Jest์˜ ๋‹ค์ค‘ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ณ„์† ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ moduleLoader ๋Š” ์ด๋ฏธ ๊ตฌ์„ฑ์˜ ์ผ๋ถ€๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

++

์šฐ๋ฆฌ๋„ ์ด๊ฒƒ์„ ์›ํ•ฉ๋‹ˆ๋‹ค. Jest๋Š” ํ›Œ๋ฅญํ•œ ์†Œํ”„ํŠธ์›จ์–ด์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ RequireJS ์ง€์›์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค์‹œ ์ž‘์„ฑํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

+1

์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ด ์ž‘์—…์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ์ด๊ฒƒ์„ ํ†ตํ•ด ์‚ฌ๋žŒ๋“ค์„ ์ง€์›ํ•˜๊ณ  ๊ณต์‹ Jest ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋งŒ๋“ค๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ์กฐ๋งŒ๊ฐ„ FB์—์„œ ์ด์— ๋ง‰๋Œ€ํ•œ ํˆฌ์ž๋ฅผ ํ•  ๊ฒƒ ๊ฐ™์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. Jest ํŒ€์€ ๋งค์šฐ ์ž‘์œผ๋ฉฐ(1.5๋ช…) ๋ถˆํ–‰ํžˆ๋„ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์ž‘์—…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

JavaScript ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฐ ํ‘œ์ค€์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉด require js ์ž์ฒด๊ฐ€ JavaScript ์ฝ”๋“œ ์ž‘์„ฑ์— ํฐ ๋ฏธ๋ž˜๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ œ ES2015์— ํ‘œ์ค€ํ™”๋œ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Babel๊ณผ Jest๋Š” ์ด์ œ ์™„์ „ํžˆ ํ†ตํ•ฉ๋˜์—ˆ์œผ๋ฉฐ ํ•จ๊ป˜ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ CommonJS ๋˜๋Š” ES2015 ๋ชจ๋“ˆ๋กœ ์ „ํ™˜ํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ฆ‰์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋” ๋งŽ์€ ๋„๊ตฌ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

require JS์—๋Š” CommonJS๋ฅผ ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” require.js๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ฌธ์„œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. http://requirejs.org/docs/commonjs.html ์ฐธ์กฐ

๊ฐœ์ธ์ ์œผ๋กœ require JS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ์—๋Š” ์•„๋ฌด๋Ÿฐ ์ด์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ require JS ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ CommonJS๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” codemod ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ๋„์›€์„ ๋“œ๋ฆฌ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” requireJS๋ฅผ CommonJS babel ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์ž‘์„ฑํ•˜๊ณ  Jest์˜ ์ „์ฒ˜๋ฆฌ๊ธฐ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@cpojer ์—ฌ๊ธฐ https://github.com/sterpe/jest-requirejs/blob/master/index.js ์—์„œ ์ „์ฒ˜๋ฆฌ๊ธฐ ์ ‘๊ทผ ๋ฐฉ์‹์œผ๋กœ ๋‹ค์†Œ ์„ฑ๊ณตํ–ˆ์ง€๋งŒ ์ง€๊ธˆ๊นŒ์ง€๋Š” !text/ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•œ ๋ณ€ํ™˜๋งŒ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ํŒ€์€ requirejs์—์„œ ์™„์ „ํžˆ ๋ฒ—์–ด๋‚ฌ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ๊ธธ์„ ๊ณ„์† ๊ฐˆ ์ด์œ ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด RequireJS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฑฐ์˜ ๊ฐ€์น˜๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. CommonJS/ES2015 ๋ชจ๋“ˆ ์ฝ”๋“œ๋ฅผ ํ”„๋กœ๋•์…˜์šฉ requirejs๋กœ ์ปดํŒŒ์ผํ•˜๋Š” ๊ฒƒ์ด ์ดํ•ด๊ฐ€ ๋˜์ง€๋งŒ ์ด ์Šคํƒ€์ผ๋กœ ์ฝ”๋“œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ์ข‹์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ RequireJS์—์„œ webpack์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฒ ์ด์Šค์—๋Š” 300๊ฐœ ์ด์ƒ์˜ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ๊ณผ์ •์€ ๋†€๋ผ์šธ ์ •๋„๋กœ ์‰ฝ๊ณ  ๊ณ ํ†ต์Šค๋Ÿฝ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ๋„๊ตฌ๋Š” AMD์—์„œ CommonJS ์Šคํƒ€์ผ๋กœ ์ฝ”๋“œ๋ฅผ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด https://github.com/Skookum/recast-to-cjs ์˜€์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ https://github.com/facebook/jscodeshift ์˜ ๋„์›€์œผ๋กœ ๋ฉฐ์น  ๋‚ด์— ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ React 0.11์—์„œ 0.14๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๊ฐ™์€ ์ƒํ™ฉ์— ์žˆ๋Š” ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@ํ…๋˜ํŠธ ๊ตฟ ! ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ ์ œ๊ฐ€ ์ „์— ๋งํ–ˆ๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค. :) ๊ทธ๊ฒƒ์ด ๋‹น์‹ ์„ ์œ„ํ•ด ์ž˜ ์ž‘๋™ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์ฉ๋‹ˆ๋‹ค.

๋‚ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
https://github.com/1twitif/testRequireJSAmdModulesWithJest
์ ์–ด๋„ ์ด ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ๋Š” ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
http://stackoverflow.com/questions/33889662/not-able-to-load-amd-modules-through-jest

์ด๊ฒƒ์ด ๋‹ซํ˜€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Facebook์ด ์ด์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

Facebook์ด ์ €๋ฅผ ์˜๋ฏธํ•œ๋‹ค๋ฉด ์˜ˆ, "๊ณต์‹์ ์ธ" ์ง€์›์ด ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ํ•ด์„œ Jest์— ๊ธฐ์—ฌํ•˜๊ณ  ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ง‰์„ ์ˆ˜๋Š” ์—†์ง€๋งŒ ์š”์ฆ˜ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ES ๋ชจ๋“ˆ์ด๋‚˜ CommonJS๋กœ ์ด๋™ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋„ค, ์•Œ์•„์š”. ๋ถˆํ–‰ํžˆ๋„ ๋‚˜๋Š” ์—…๋ฌด์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ์ข…์†์„ฑ์—์„œ ๋ฒ—์–ด๋‚  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

babel-plugin-transform-amd-to-commonjs ๋Š” ํŠนํžˆ babel-jest์™€ ๊ฐ™์€ ๊ฒƒ์„ ์ด๋ฏธ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ Jest+AMD ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ๋ณ€ํ™˜์„ ์‹คํ–‰ํ•˜์—ฌ Jest๊ฐ€ AMD ํŒŒ์ผ์„ ํˆฌ๋ช…ํ•˜๊ฒŒ ์š”๊ตฌํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์ œ ํ”„๋กœ์ ํŠธ ๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ ์ด๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์ด ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŠนํžˆ Jest/RequireJS/Webpack/etc ๊ฐ„์˜ ๊ตฌ์„ฑ ๊ณต์œ ์— ๋Œ€ํ•œ ์ข‹์€ ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. .js ๊ตฌ์„ฑ ํŒŒ์ผ์— ๋Œ€ํ•œ Jest ์ง€์›์€ ๋ณด๋‹ค ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์„ ํ–ฅํ•œ ๋‹จ๊ณ„๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค(https://github.com/facebook/jest/issues/2140 ์ฐธ์กฐ).

@msrose ๊ต‰์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ณต์œ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ์˜ค๋ž˜๋œ ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ๋ณ€ํ™˜์ด ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

exports.process = function (content) {
  return 'function define(name, deps, body) { module.exports = body.apply(undefined, deps.map(require)); }' + content;
}

AMD -> CJS์˜ ๋ณ€ํ™˜์€ ์˜ˆ๋ฅผ ๋“ค์–ด deamdify , ๋ž˜ํผ ์‚ฝ์ž… ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ๋ฌธ์ œ๋Š” Require ์Šคํƒ€์ผ ๋กœ๋”/ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค. fooTemplate = require('tpl!foo.tpl') ๋ฐ barJson = require('json!bar.json') (์ƒ๋Œ€์ ์œผ๋กœ ์ผ๋ฐ˜์ ์ธ ๊ฒƒ)์™€ ๊ฐ™์€ ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ๋“ค์ด ์ƒ๋‹นํžˆ ๋งŽ์•˜๊ณ  ์‹ค์ œ require-js ํ”„๋กœ์ ํŠธ์—๋Š” ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๊ตฌ๋ฌธ์ด ํฉ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ถ๊ทน์ ์œผ๋กœ jest ์˜ ๋ชจ๋“ˆ ๋กœ๋”์— ๊ณต๊ธ‰๋˜๋Š” ๋ณ€ํ™˜ ์‹œ์Šคํ…œ์—์„œ ๊ธฐ์กด require-js ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ง์ ‘ ์žฌ์‚ฌ์šฉํ•˜๋Š” ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

+1

ReferenceError: define is not defined

+1

srcApp.test.js ์‹คํŒจ
โ— ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ์‹คํ–‰ ์‹คํŒจ

ReferenceError: define is not defined

amd ๋Œ€์‹  umd๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜์ง€ ์•Š๋‹ค๋ฉด ๋ณ€ํ™˜์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ์œ„์— ๋งํฌ๋œ babel ํ”Œ๋Ÿฌ๊ทธ์ธ).

loader! ๊ตฌ๋ฌธ์— ๊ด€ํ•ด์„œ๋Š” ์ด๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(Webpack์—์„œ๋„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค). ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ๋ณ€ํ™˜ํ•˜๊ณ (๋กœ๋” ์ œ๊ฑฐ) Jest๊ฐ€ transform ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€ํ™˜ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ด€๋ จ ํ† ๋ก : #4868

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰