React์ Jest์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ฝค๋ณด๋ฅผ ์ฌ๋ํฉ๋๋ค. ์ด์จ๋ ์ ๋ _livereload_ ๋ชจ๋์์ ํ ์คํธ๋ฅผ ์คํํ๋ ๋ฐ ์ต์ํฉ๋๋ค. ๋ฐ๋ผ์ ํ ์คํธ ํ์ผ์ด ์ ์ฅ๋ ๋๋ง๋ค ํ ์คํธ๊ฐ ์๋์ผ๋ก ์คํ๋ฉ๋๋ค. ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ์ง๋ง ํ ์คํธ๋ฅผ ์คํํ๋ ๋ฐ ๊ฑฐ์ 3์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค. ํ๋์ ํ ์คํธ ํ์ผ๋ง ์์ผ๋ฉด ๋ฉ๋๋ค. ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ํตํด ํ์ผ์ ์คํํ๊ณ ์์ผ๋ฏ๋ก ๋ฌธ์ ๊ฐ ์๋ ๊ณณ์ผ๋ก ์์ฌ๋ฉ๋๋ค. ํ ์คํธ๋ฅผ ๋น ๋ฅด๊ฒ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ ์์ด๋ TDD/BDD ์ํฌํ๋ก์ ์๋๋ฅผ ๋์ด๋ ๋ฐฉ๋ฒ์ ๋ํ ์กฐ์ธ์ด ์์ต๋๊น?
์๋
ํ์ด๋ก . ํ ํ์ผ์ ๋ํด 20์ด ์ด์ ๋์ ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. :)
๋ฌธ์ ๋ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์์ 'jest'๋ฅผ ์คํํ๋๋ก ๊ตฌ์ฑํ๋ค๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ Jest๊ฐ ํ
์คํธ๋ฅผ ์ํด ํ์ธํ๋ ๋ง์ ํ์ ๋๋ ํ ๋ฆฌ๊ฐ ์์ต๋๋ค. ํ
์คํธ ๊ฒฝ๋ก ์ง์ ์ด ์ด๋ฒ์ 10๋ฐฐ ์ด์ ์ค์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ปคํผ ์ ์ฒ๋ฆฌ๊ธฐ๋ ์์ต๋๋ค. package.json์์
"์คํฌ๋ฆฝํธ": {
....
"test": "jest ๊ฒฝ๋ก/to/modules/to/test"
}
BTW, ์ปคํผ๋ฅผ ์ ์ฒ๋ฆฌํ๊ฑฐ๋ ๋ฌด์์ ๋๊น? :)
@gothy๋ฅผ ๋ค์ ์ฐพ์์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. JSX์ ํจ๊ป ์ผ๋ฐ JS๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์์ (https://github.com/facebook/jest/tree/master/examples/react)์ ๊ฐ์ JSX ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ํตํด ํ ์คํธ๋ฅผ ์คํํ๊ณ ์์ต๋๋ค. ์์ ๋ฅผ ์คํํ๋ ๋ฐ๋ ์ฝ 2.5 - 3์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค. jQuery ์์ ๋ 1์ด๋ ์ฑ ๊ฑธ๋ฆฌ์ง ์์ต๋๋ค. JSX ์ ์ฒ๋ฆฌ๊ธฐ๋ JSX ํ์ผ์ ์ฒ๋ฆฌํ ๋ ๋๋ฌด ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋๋ก ๋์ด ์์ต๋๊น?
๋ฐ์ ํ ์คํธ
jQuery ํ ์คํธ
์, JSX์๋ ์ฌ์ฉํ์ง ์์์ต๋๋ค. ์ด ํ๋ก์ธ์์ ๋ํด ์๋ฌด ๋ง๋ ํ ์ ์์ต๋๋ค. ์ด์ฉ๋ฉด ์ค์ ๋ก ๋๋ฆด ์๋ ์์ต๋๋ค. ์ค๋๋ ๋ฌผ๊ฑด์ด ๋ง์ ์ค์ ํ๋ก์ ํธ์ ๋๋ ํ ๋ฆฌ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. :)
Coffeescript ์ ์ฒ๋ฆฌ๊ธฐ์ ๋น์ทํ ๋ฌธ์ ๋ฅผ ๊ฒฝํํ์ต๋๋ค. ์ฌ๊ธฐ์ ๋ฌธ์ ๋ ์ ์ฒ๋ฆฌ๊ธฐ๊ฐ ์ข ์์ฑ๋ ์ฒ๋ฆฌํ๋ ค๊ณ ํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ง์ ๊ฒ์ ์๊ตฌํ๋ฉด ์๋๊ฐ ๋๋ ค์ง๋๋ค.
๋๋ ๋ํ jest๋ก ๋๋ฆฐ ํ ์คํธ๋ฅผ ๊ฒฝํํฉ๋๋ค :(
๊ฐ์ ์ผ์ ๊ฒช๊ณ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ์ ์ฒ๋ฆฌ์ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค(์ด ์์ ํ์ผ์ ๋ํ JSX ์ฒ๋ฆฌ๋ ๋น ๋ฆ). ๋ค์ require ๋ฌธ ์ค ํ๋๋ฅผ ์ ์ธํ๊ณ ์์ ํ ์คํธ์ ๋ชจ๋ ์ฝ๋๋ฅผ ์ฃผ์ ์ฒ๋ฆฌํ๋๋ฐ ํ ์คํธ๋ ์ฌ์ ํ 4์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค. ๋ด๊ฐ ์ฃผ์์ ์ ๊ฑฐํ์๋ง์ ํ ์คํธ๋ 0.1์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค. ์กฐ๊ธ ํํค์ณ๋ณด๋ HasteModuleLoader๊ฐ 490๊ฐ์ ํ์ ํจํค์ง(_shouldMock())๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๊ณ ๋ฐ์/์ ๋์จ์ด ํ์ํ ๋ ๋ชจ์ํ์ง ์์์ผ ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
var React = require('react/addons');
๋๋
var CheckboxWithLabel = require('../CheckboxWithLabel.js');
๋ค์ var React = require('react/addons');
์ ์ ๊ฑฐํ์ง๋ง ์ฌ์ ํ ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ํตํด ํ์ผ์ ์คํํ์ต๋๋ค. ๋๋ ์๋ง 0.2์ด ๊ฐ์ ์ ์ป์๋ค. ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์ ๊ฑฐํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ํ๋ฉ๋๋ค.
JSX ์ ์ฒ๋ฆฌ๊ธฐ ์ฌ์ฉ
JSX ์ ์ฒ๋ฆฌ๊ธฐ ์์ด
์ ๋ Jasmine๋ณด๋ค Mocha๋ฅผ ์ ํธํ๊ณ ๋ฐ์ ๊ตฌ์ฑ ์์๋ฅผ ๋น๋ํ ๋ค์ mocha ํ ์คํธ ์ ํ๊ตฐ(์๋ ์ค๋ํซ)์ ํตํด ์คํํ gulpfile์ ์ค์ ํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
function buildScript(file, watch) {
var bundler = browserify(file);
var stream;
bundler.transform(reactify);
stream = bundler.bundle();
return stream.on('error', handleErrors)
.pipe(source(file))
.pipe(gulp.dest(buildDir + '/'))
.pipe(mocha({ reporter: 'list' }));
}
์ฌ์ ํ reactify๋ฅผ ์ฌ์ฉํ์ฌ JSX ํ์ผ์ ์ฌ์ ์ฒ๋ฆฌํด์ผ ํ์ง๋ง ๋๋ฆฐ ํ ์คํธ์ ๋ํ ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ๋ฐ๋ผ์ ๋ฐํ์์ ์ฌ์ ํ โโ2์ด ๋ฏธ๋ง์ด ๊ฑธ๋ฆฌ์ง๋ง ์ค์ ํ ์คํธ๋ ์ฝ 32ms์ ๋๋ค. ์ฌ์ ํ JSX๋ฅผ ์ฌ์ฉํ ๊ฐ์น๊ฐ ์๋์ง ๊ฒฐ์ ํฉ๋๋ค.
์ค, ๋น์ ๋ง์ด ๋ง์. JSX๋ฅผ ์ฌ์ฉํ์ง ์๋ jest ๋ฐ์ ์์ ๋ฅผ ํ ์คํธํ๋๋ฐ 4์ด์ ๊ฐ๊น์ ๋๋ฐ 0.75์ด๋ก ์ค์์ต๋๋ค. JSX๋ฅผ ์ฌ์ฉํ ๊ฐ์น๊ฐ ์๋์ง ์ ๋ง ์๊ฐํ๊ฒ ๋ง๋ญ๋๋ค. ํฐ ํ๋ก์ ํธ์์๋ ๋ค๋ฅธ ํจํค์ง๊ฐ ๋ง์ง ์์ ํ ๊ฝค ๋นจ๋ฆฌ ๋๋ ค์ง ๊ฒ์ ๋๋ค. ์ ์ฒ๋ฆฌ๊ธฐ๊ฐ ํด๋น ๋จ์ผ ํ์ผ์ด ์๋๋ผ ๋ชจ๋ 490๊ฐ ์๊ตฌ์ฌํญ์์ ์คํ๋๋์ง ๊ถ๊ธํฉ๋๋ค. ๊ทธ ๊ฐ๋จํ ๊ตฌ์ฑ ์์์ ๋ํด 3์ด๊ฐ ๊ฑธ๋ฆฌ๋ฉด ์ ๋ฉ๋๋ค.
์ด๋ ์ชฝ์ด๋ , ๋ด ์ํฌํ๋ก๋ฅผ ์ํด ํ ์คํธ๋ฅผ ๋น ๋ฅด๊ฒ ์ํํด์ผ ํฉ๋๋ค. ์ ์ด๋ ํ๋์ ์ ํ๊ตฐ์ ์คํํ๋ ๋ฐฉ๋ฒ์ ์์๋ด์ผ ํฉ๋๋ค. ์ฌ์ค๋ฏผ์์๋ "describe" ๋ฐ "it" ๋์ "ddescribe" ๋๋ "iit"๋ฅผ ์ฌ์ฉํ์ฌ ๋จ์ผ ํ ์คํธ ๋๋ ์ ํ๊ตฐ์ ์คํํ ์ ์์ต๋๋ค. Jest๋ ์ ๋ง ํ๋ฅญํฉ๋๋ค. ์ด์ ๋น ๋ฅธ ์ํฌํ๋ก๊ฐ ํ์ํฉ๋๋ค.
var React = require('react');
var CheckboxWithLabel = React.createClass({displayName: 'CheckboxWithLabel',
getInitialState: function() {
return { isChecked: false };
},
onChange: function() {
this.setState({isChecked: !this.state.isChecked});
},
render: function() {
return (
React.DOM.label(null,
React.DOM.input(
{type:"checkbox",
checked:this.state.isChecked,
onChange:this.onChange}
),
this.state.isChecked ? this.props.labelOn : this.props.labelOff
)
);
}
});
module.exports = CheckboxWithLabel;
@jeffchan ์ด ์ณ์์ต๋๋ค. ํ์ํ ๋ชจ๋ ์ฝ๋๋ JSX ํ์ผ๋ฟ๋ง ์๋๋ผ ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ํตํด ์คํ๋ฉ๋๋ค.
๊ฐ์ฅ ๋น ๋ฅธ ์๋ฃจ์ ์ ์์ ํ๋ ๋์ ๋ณ๊ฒฝ๋ JSX ํ์ผ๋ง ์ฒ๋ฆฌํ๊ธฐ ์ํด ๊ฟ๊บฝ ๊ฟ๊บฝ ๋ง์๊ณ ๊ฐ์ํ๊ณ ๋ฐ์ํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ฉด ์คํํ๋ ค๋ ํ ์คํธ๋ง ์ง์ ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด JSX ํ์ผ์ด ํ ๋ฒ๋ง ์ฒ๋ฆฌ๋๊ณ ๋ด๊ฐ ์ด๋ค ํ ์คํธ๋ฅผ ์คํํ ์ง ์ ์ดํ ์ ์์ต๋๋ค. ์ด์ ๊ฐ์ ๊ฒ์ ํ ์คํธ ์ํฌํ๋ก์ ์ ๋ง ์ข์ ๊ฒ์ ๋๋ค.
gulp jest --tests "Checkbox*,*Form*"
๊ทธ๋ฐ ๋ค์ Watchify๋ ์ด๋ฌํ ํ ์คํธ๊ฐ ์์กดํ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์ํ ๋ค์ ๋ณ๊ฒฝ ์ฌํญ๋ง ์ฒ๋ฆฌํ ๋ค์ ์์ ์ค์ธ ํ ์คํธ๋ง ์คํํฉ๋๋ค.
@iamrandys 100% ๋์ํฉ๋๋ค. Jest์ React๋ ํ๋ฅญํ์ง๋ง JSX๋ฅผ JS๋ก ์ปดํ์ผํ๋ ๊ฒ์ ํฐ ์ฅ์ ๋ฌผ์ ๋๋ค. Gulp๊ฐ JSX ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ํตํด ์คํ๋๋ ํ์ ํ์ผ(๋น JSX) ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ง ๊ถ๊ธํ์ญ๋๊น? ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ์ ์ํ๊ณ ์์ต๋๊น? - http://blog.avisi.nl/2014/04/25/how-to-keep-a-fast-build-with-browserify-and-reactjs/ ?
์, gulp ํ๋ฌ๊ทธ์ธ์ด ์๋ ์ผ์ข
์ ์บ์ฑ ๋ ์ด์ด์ ๋ํด ์๊ฐํ๊ณ ์์ต๋๋ค.
์์
2014๋ 8์ 11์ผ 08:35 Tyrone Avnit [email protected] ์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
@iamrandys https://github.com/iamrandys 100% ๋์ํฉ๋๋ค. ๋๋ด๊ณผ
React๋ ํ๋ฅญํ์ง๋ง JSX๋ฅผ JS๋ก ์ปดํ์ผํ๋ ๊ฒ์ ํฐ ์ฅ์ ๋ฌผ์ ๋๋ค. ๋จ์ง
Gulp๊ฐ ํ์ํ ํ์ผ(๋น
JSX)๊ฐ JSX ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ํตํด ์คํ๋๊ณ ์์ต๋๊น? ๋น์ ์ ๋ญ๊ฐ๋ฅผ ์ ์ํ๊ณ ์์ต๋๊น
๋ค์๊ณผ ๊ฐ์ด? -
http://blog.avisi.nl/2014/04/25/how-to-keep-a-fast-build-with-browserify-and-reactjs/
?โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/facebook/jest/issues/116#issuecomment -51749798.
์ ํํ๋ gulp์ watchify๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ ์๋๊ฐ ๋๋ผ์ธ ์ ๋๋ก ๋น ๋ฆ
๋๋ค. ๋์ ธ
gulp-livereload๋ ๊ฐ ๋ณ๊ฒฝ ํ ๋ธ๋ผ์ฐ์ ๋ฅผ ์๋ก ๊ณ ์น๊ณ
๋๋ผ์ด ๊ฐ๋ฐ ํ๊ฒฝ. ๋ณ๊ฒฝํ๊ณ ์ ์ฅํ๋ฉด ๊ฑฐ์
์ด๋ ค ์๋ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์ ๋ชจ๋ ์ฅ์น์์ ๋ณ๊ฒฝ ์ฌํญ์ ์ฆ์ ํ์ธํ ์ ์์ต๋๋ค. ์ง๊ธ
๋ด TDD์ ๋ํด ๋์ผํ ๊ฒ์ด ํ์ํฉ๋๋ค.
๋๋ต ์ด๋ ์ง๋ง hbsfy ๋์ reactify๋ฅผ ์ฌ์ฉํ์ญ์์ค.
https://gist.github.com/benhowdle89/9533185
2014๋
8์ 11์ผ ์์์ผ ์ค์ 2:35 Tyrone Avnit [email protected]
์ผ๋ค:
@iamrandys https://github.com/iamrandys 100% ๋์ํฉ๋๋ค. ๋๋ด๊ณผ
React๋ ํ๋ฅญํ์ง๋ง JSX๋ฅผ JS๋ก ์ปดํ์ผํ๋ ๊ฒ์ ํฐ ์ฅ์ ๋ฌผ์ ๋๋ค. ๋จ์ง
Gulp๊ฐ ํ์ํ ํ์ผ(๋น
JSX)๊ฐ JSX ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ํตํด ์คํ๋๊ณ ์์ต๋๊น? ๋น์ ์ ๋ญ๊ฐ๋ฅผ ์ ์ํ๊ณ ์์ต๋๊น
๋ค์๊ณผ ๊ฐ์ด? -
http://blog.avisi.nl/2014/04/25/how-to-keep-a-fast-build-with-browserify-and-reactjs/
?โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/facebook/jest/issues/116#issuecomment -51749798.
@iamrandys๋ ๊ฐ์ฌํฉ๋๋ค. Mocha์ Chai๋ฅผ ์ฌ์ฉํ๋ ๋น ๋ฅธ ๋ฐ์ ์ฑ๋ถ ๋ณด์ผ๋ฌ ํ๋ ์ดํธ ๊ฐ๋ฐ(์์ค๋ฏผ์ผ๋ก ์ฝ๊ฒ ๋์ฒด ๊ฐ๋ฅ). ํ ์คํธ๋ ๋งค์ฐ ๋น ๋ฅด๋ฉฐ Livereload์ ์ถ๊ฐ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค. ์ํ๋ ๋๋ก ์ฌ์ฉํ์ญ์์ค.
์ด๋ ์ชฝ์ด๋ , ๋ด ์ํฌํ๋ก๋ฅผ ์ํด ํ ์คํธ๋ฅผ ๋น ๋ฅด๊ฒ ์ํํด์ผ ํฉ๋๋ค. ์ ์ด๋ ํ๋์ ์ ํ๊ตฐ์ ์คํํ๋ ๋ฐฉ๋ฒ์ ์์๋ด์ผ ํฉ๋๋ค. ์ฌ์ค๋ฏผ์์๋ "describe" ๋ฐ "it" ๋์ "ddescribe" ๋๋ "iit"๋ฅผ ์ฌ์ฉํ์ฌ ๋จ์ผ ํ ์คํธ ๋๋ ์ ํ๊ตฐ์ ์คํํ ์ ์์ต๋๋ค. Jest๋ ์ ๋ง ํ๋ฅญํฉ๋๋ค. ์ด์ ๋น ๋ฅธ ์ํฌํ๋ก๊ฐ ํ์ํฉ๋๋ค.
ํ์คํ it.only
๋ฅผ ์ธ ์ ์๊ณ describe.only
๋ ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
Karma๋ ๋น์ ์ด ์ํ๋ ๊ฒ์ ์ ํํ ํ๊ณ ๋น์ ์ด ํด์ผ ํ ์ผ์ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
karma.conf ํ์ผ์ ํ๋ก์ ํธ์ ์ถ๊ฐํฉ๋๋ค. ๋๋ ์นด๋ฅด๋ง๊ฐ ๋ฐ์์ ์ง์ํ๋ค๋ ๊ฒ์ ๊นจ๋ซ์ง ๋ชปํ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ธ๋ผ์ฐ์ ํํฉ๋๋ค. ์ด์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ๋์์ ํ
์คํธํ ์ ์์ต๋๋ค.
๋๋ ๋น์ ์ ์์ฉ๊ตฌ ํ๋ก์ ํธ์ ๋ํ PR์ ๋ง๋ค์์ต๋๋ค.
https://github.com/iamrandys/react-component-boilerplate/tree/karma
'npm test'๋ฅผ ์คํํ๊ธฐ๋ง ํ๋ฉด karma๊ฐ ๋ธ๋ผ์ฐ์ ๋ฅผ ์คํํ๊ณ ๋ค์์ ๊ฐ์ํฉ๋๋ค.
๋ณ๊ฒฝ.
2014๋
8์ 12์ผ ํ์์ผ ์ค์ 10:35 Tyrone Avnit [email protected]
์ผ๋ค:
@iamrandys https://github.com/iamrandys ๊ฐ์ฌํฉ๋๋ค
๋ฐ์ ๊ตฌ์ฑ ์์ ๋ณด์ผ๋ฌ ํ๋ ์ดํธ
https://github.com/TYRONEMICHAEL/react-component-boilerplate ์ฌ์ฉ
๋ชจ์นด์ ์ฐจ์ด(์์ค๋ฏผ์ ์ฝ๊ฒ ๋์ฒด ๊ฐ๋ฅ). ํ ์คํธ๋ ๊ทน๋๋ก
Livereload์ ์ถ๊ฐ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค. ์ํ๋ ๋๋ก ์ฌ์ฉํ์ญ์์ค.โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/facebook/jest/issues/116#issuecomment -51931532.
JSX ๋ณํ์ด ์๋ JSX ํ์ผ์ ๋ฐฉ์งํ๋ ค๋ฉด ๋ค์ preprocessor.js๋ฅผ ์ฌ์ฉํ์ญ์์ค. ๊ทธ๋๋ก /** @jsx
์ ๋์ฌ๊ฐ ํฌํจ๋ .jsx
ํ์ผ๋ง ์ฒ๋ฆฌํฉ๋๋ค. .js
ํ์ผ์ JSX ๋ณํํ๋ ค๋ฉด ||
์์ ์๋ if ์กฐ๊ฑด์ ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ ์ ๊ฑฐํ๋ฉด ๋ฉ๋๋ค( src.slice ...
์กฐ๊ฑด๋ง ๋จ๋๋ก).
// from http://facebook.github.io/jest/docs/tutorial-react.html
var ReactTools = require('react-tools');
var MAGIC = "/** @jsx";
module.exports = {
process: function(src, file) {
if (!/\.jsx$/.test(file) || src.slice(0, MAGIC.length) != MAGIC) return src;
return ReactTools.transform(src);
}
};
๊ทธ๋๋ ์ข ๋๋ฆฝ๋๋ค.
ํฅ๋ฏธ๋ก์ด ์ค๋ํซ @sqs. ์์ ํด์ค ๋ด๊ฐ ํ๋ ธ๋ค๋ฉด ์ฌ์ ํ ๊ฐ ํ์ผ์ ์ดํด๋ณด๊ณ ๋ณํํด์ผ ํ๋์ง ํ์ธํ ํ์๊ฐ ์์ต๋๊น? ๋๋ react-component-boilerplate๋ฅผ ์ฌ์ฉํ์ฌ ๋ง์ ์ฑ๊ณต์ ๊ฑฐ๋์๋ค. ํ ์คํธ๋ ์ค์ ๋ก ๋งค์ฐ ๋น ๋ฅด๊ฒ ์คํ๋ฉ๋๋ค.
์์ฃผ ์ข์. ์ด๋ฅผ ํตํด ์๊ฐ์ด 9.3์ด์์ 4.7์ด๋ก ๋จ์ถ๋์์ต๋๋ค. ์ด๊ฒ์ ๋จ์ผ ํ ์คํธ์ฉ์ ๋๋ค. ๋๋ ์ฌ์ ํ ํจ์ฌ ๋ ๋น ๋ฅธ Karma๋ฅผ ์ ์งํด์ผ ํ ๊ฒ์ ๋๋ค(100๋ฒ์ ํ ์คํธ๋ 1์ด ๋ฏธ๋ง ์์). ๋ํ Karma๋ ์์ ์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ด์ฐฐํ๊ณ ์ฌ๋ฌ ๋ธ๋ผ์ฐ์ ์์ ์ฝ๋๋ฅผ ํ ์คํธํ์ง๋ง Jest์ ์๋ ์กฐ๋กฑ์ ์ข์ํฉ๋๋ค. rewireify๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก ์คํ์ด๋ฅผ ๋ง๋๋ ๊ฒ์ ์ถ๊ฐ ์์ ์ด์ง๋ง ์์ ํ ์ ์ดํ ์ ์์ต๋๋ค.
์, ์ ๊ฐ ๋น์ ์ ์คํดํ๊ณ ์์์ง๋ ๋ชจ๋ฅด์ง๋ง, jsx๊ฐ ํฌํจ๋ .js ํ์ผ์ด ์๊ณ pragma ํค๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์งํ๋ ค๋ ๊ฒฝ์ฐ .jsx์ ๋ํ ๊ฒ์ฌ๋ฅผ ์ ๊ฑฐํ๋ค๋ ์๋ฏธ์ ๋๋ค.
๋ด iPhone์์ ๋ณด๋ธ
2014๋ 8์ 28์ผ 23์ 45๋ถ์ Tyrone Avnit [email protected]์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
ํฅ๋ฏธ๋ก์ด ์ค๋ํซ @sqs. ์์ ํด์ค ๋ด๊ฐ ํ๋ ธ๋ค๋ฉด ์ฌ์ ํ ๊ฐ ํ์ผ์ ์ดํด๋ณด๊ณ ๋ณํํด์ผ ํ๋์ง ํ์ธํ ํ์๊ฐ ์์ต๋๊น? ๋๋ react-component-boilerplate์ ํจ๊ป ๋ง์ ์ฑ๊ณต์ ๊ฑฐ๋์์ต๋๋ค. ํ ์คํธ๋ ์ค์ ๋ก ๋งค์ฐ ๋น ๋ฅด๊ฒ ์คํ๋ฉ๋๋ค.
โ
์ด ์ด๋ฉ์ผ์ ์ง์ ํ์ ํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
์๋
ํ์ธ์! ๋๋ ๋๋ด์ ์ํด --watch
์ ํ๊ณ ์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ์ด ์์
์ ๋ ๋น ๋ฅด๊ฒ ์งํํ๋ ค๊ณ ๋
ธ๋ ฅํ๊ณ ์์ต๋๋ค. ๊ณง ๋ค์ ๋ณด๊ณ ํ ๊ฒ์
๋๋ค.
๋๋ฅผ ์ํ ์ฒซ ๋ฒ์งธ ์คํ์ ์ฝ 5์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค. ๊ทธ ํ ๊ฐ ์ถ๊ฐ ์คํ์๋ ์ฝ 1.2-1.5์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค.
๊ทธ ์๊ฐ ์ค ์๋นํ ์๊ฐ์ด ์๋๋ฌ ์บ์๋ฅผ ๋ก๋ํ๋ ๋ฐ ์๋น๋ ๊ฒ ๊ฐ์ต๋๋ค(๋ด ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ์ด๋ฏธ 4๋ฉ๊ฐ ํ์ผ์ ๋๋ค.
--watch
์์
์ ๊ธฐ๋ํ๊ณ ์์ง๋ง ํ
์คํธ๋ฅผ ์คํํ๋ ๋ฐ 1.2์ด์ ๋ก๋ ์๊ฐ์ด ํ์ํ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ๊ถ๊ธํฉ๋๋ค. ๋๋ ์๋๋ฅด๋ ๊ฒ์ด ๋ฌด์์ ํ๊ณ ์๊ณ ์ ๋๋ด์ด ๊ทธ๊ฒ์ ์ฌ์ฉํ๋์ง์ ๋ํด ์๋ฌด๊ฒ๋ ์์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๋๋ ๊ฝค ๋จ์๊ฐ ์์ต๋๋ค.
Haste๋ CommonJS ๋ชจ๋ ํ์์ ํน์ง์ ์ง์ํฉ๋๋ค. ๋ชจ๋ ์ด๋ฆ์ด ์๋์ ์ธ ๊ฒ์ด ์๋๋ผ ์ต์์ ์์ค์ธ ๊ฒฝ์ฐ์
๋๋ค. ์ฆ, ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ๋ชจ๋(๋ฐ ์ข
์์ฑ)์ ์์์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ฐ require
์์ ๋ชจ๋์ ์ฐพ๊ธฐ ์ํด ํ์ผ ์์คํ
์ ํ์ํ๋ ๊ฒ์ด ์์ฒญ๋๊ฒ ๋นํจ์จ์ ์
๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ์๋ ๋ชจ๋ ํ์(์: node.js)์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ Haste์ ๋ํ ์์์ ์ข
์์ฑ์ ์ ๊ฑฐํ๊ธฐ๋ฅผ ์ํ๋ฉฐ(์ต์
์ด ์ ๊ณต๋์ง ์๋ ํ) ์ด๋ ๊ฒ ํ๋ฉด ๋ ๋นจ๋ผ์ง ๊ฒ์
๋๋ค.
@amasad ๋๋จํ๋ค์ . ๋๋ intern.js๋ฅผ ์๋ํ๊ณ cmd ๋ผ์ธ์์ ์ผ๋ฐ ๋จ์ ํ ์คํธ๋ฅผ ์คํํ์ฌ ๋ช ms ์์ ์๋ฃ๋ฉ๋๋ค. ๋๋ด์ด ๊ทธ๋ ๊ฒ ๋นจ๋ฆฌ ๊ฐ ์ ์๋ค๊ณ ์๊ฐํฉ๋๊น? ๊ทธ๋ฆฌ๊ณ jasmine์ด๋ mocha์ ๊ฐ์ ๋ค๋ฅธ ํ๋ ์์ํฌ์์ ์ฌ์ฉํ ์ ์๋๋ก automocking ๋ถ๋ถ์ ์ถ์ถํ๋ ๊ฒ์ ๊ณ ๋ คํด ๋ณด์ จ์ต๋๊น?
beforeEach
๋๋ it
์ฝ๋ฐฑ์์ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉํ๋ ๋์ describe ์ฝ๋ฐฑ์์ ํ์ผ(ํนํ 'react/addons' ๋ฐ ํ
์คํธ ์ค์ธ ๋ชจ๋)์ด ํ์ํ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
๋ถ๋ช
ํ ๋๋ โโjsx๊ฐ ์๋ ์ปคํผ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๊ณ ์์ง๋ง ์ด๊ฒ์ require
ํธ์ถ์ ์๋์ผ๋ก ๋ชจ์ํ๊ธฐ ์ํด ์์
ํ๋ ์ ์ฒ๋ฆฌ๊ธฐ ์์
๊ณผ ๋๋ด์ ๋ชจ๋ ์ ์ฅํฉ๋๋ค.
__tests__/login_fields.coffee (3.013s)
(์์ผ!)
describe 'Login Fields', ->
beforeEach ->
{TestUtils} = require('react/addons').addons
LoginFields = require '../login_fields'
...
it 'should have left animation states defined', ->
{TestUtils} = require('react/addons').addons
...
it 'should have a translateX value equal to enterStateStart.left', ->
{TestUtils} = require('react/addons').addons
...
it 'should call handleLogin on button click or enter press with the entered username and password', ->
{TestUtils} = require('react/addons').addons
...
it 'should call updateFields on all change events', ->
{TestUtils} = require('react/addons').addons
...
๊ทธ๋ฌ๋, ๊ทธ๊ฒ์ ํจ์ฌ ๋นจ๋ผ์ง๋๋ค ...
__tests__/login_fields.coffee (0.604s)
(๋์์ง ์์)
describe 'Login Fields', ->
{TestUtils} = require('react/addons').addons
LoginFields = require '../login_fields'
# require other repeatedly needed modules here as well
beforeEach ->
# now you can use TestUtils to renderIntoDocument LoginFields here
it 'should have left animation states defined', ->
# and use TestUtils here
...
๋ด ํ ์คํธ๋ ์ง๊ธ๊น์ง ๊ถ์ฅ๋ ๋ชจ๋ ์ต์ ํ๋ฅผ ์ฌ์ฉํ ํ์๋ 14์ด์ ๋๋ค. 16GB RAM๊ณผ SSD๋ฅผ ์ฌ์ฉํ๋๋ผ๋. Jest๋ ํ์ฌ ์ํ์์ ์์ ํ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฃ์กํฉ๋๋ค. Karma๋ก ์ ํํฉ๋๋ค.
๋๋ karma, mocha, chai, sinon, rewireify ๋ฐ aliasify๋ก ํฐ ์ฑ๊ณต์ ๊ฑฐ๋์์ต๋๋ค. 300๊ฐ ์ด์์ ํ ์คํธ๊ฐ 1/2์ด์ ์คํ๋ฉ๋๋ค. ๋ฌด์๋ณด๋ค๋ React๋ ํ๋ฅญํฉ๋๋ค!!!!! ํ์ ๊ทธ๊ฒ์ ์ฌ๋ํ๊ณ ๊ทธ๊ฒ์ผ๋ก ์ ๋ง ์ข์ ๊ฒ๋ค์ ๊ฐ๋ฐํ๊ณ ์์ต๋๋ค. ๋๋ฌด ๊นจ๋ํ๊ณ ์ ์ง ๋ณด์๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ง๊ธ๊น์ง ์ฌ์ฉํ๋ ๊ฒ๊ณผ๋ ์์ฒญ๋ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
๋ฐฉ๊ธ ์ด๊ฒ์ ๋ถ๋ช์ณค์ต๋๋ค. ํ ์คํธ๊ฐ _REALLY_ ๋๋ฆฌ๊ฒ ์คํ๋ฉ๋๋ค. ๋๋ฆฐ ํ ์คํธ์ ๋ฌธ์ ๋ ๊ฐ๋ฐ์๊ฐ ํ ์คํธ๋ฅผ ๋นํ์ฑํํ๊ฑฐ๋ ์ผ๋ถ๋ง ์คํํ๋ค๋ ๊ฒ์ ๋๋ค. ์ด ๋ฌธ์ ์ ์์ธ์ด ๋ฌด์์ธ์ง ์์ญ๋๊น? ๋ด๊ฐ ์ด๋ป๊ฒ ๋์์ด ๋ ์ ์์ต๋๋ค?
๋๋์ด ์ ํํ ๋ฌธ์ ๊ฐ์์์ต๋๋ค. ํ ์คํธ๋ ์ฒ์์ ์ฝ 17 ์ด๊ฐ ๊ฑธ๋ ธ๊ณ ์บ์ฑ ํ์๋ 4 ์ด๊ฐ ๊ฑธ๋ ธ์ต๋๋ค. ๋ด ๋น๋ ๋๋ ํ ๋ฆฌ์ ์ธ๋ถ ๋ชจ๋์ด ์ ๋๋ก ์ ์ธ๋์ง ์์ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ์์ค ๋๋ ํ ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๋๋ก testPathDirs ๊ตฌ์ฑ ์ต์ ์ ์ค์ ํ๋ฉด ๋ฐํ์์ด 0.5์ด๋ก ๋จ์ถ๋์์ต๋๋ค.
์ด๊ฒ์ React v0.12+๋ฅผ ์ฌ์ฉํ์ฌ ์ ์๊ฒ ํจ๊ณผ์ ์ด์์ต๋๋ค.
var ReactTools = require('react-tools');
module.exports = {
process: function(src, file) {
if(!file.match(/\.react\.js$/)) return src;
return ReactTools.transform(src);
}
};
Jest๋ ์ฌ์ฉํ๊ธฐ ์์ํ์ต๋๋ค. ์ผ๋ฐ JavaScript ๋ชจ๋(JSX/React ์์)์ ํ ์คํธํ๊ธฐ๋ง ํ๋ฉด Jest๊ฐ ๋งค์ฐ ๋๋ฆฝ๋๋ค. ์ธ๋ผ์ธ ํ ์คํธ์ ๋ด์ฅํ ์กฐ๋กฑ์ด๋ผ๋ ์์ด๋์ด๊ฐ ๋ง์์ ๋ค์ง๋ง ๋๋ฌด ๋๋ฆฌ๊ธฐ ๋๋ฌธ์ Mocha๊ฐ ๊ทธ๋ฆฌ์์ง๋๋ค. ๋ฒ์ธ์ด ๋ฌด์์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค ... ๋๋ฆฐ ์๋๋ฅผ ์ผ์ผํค๋ ๋๋ ํ ๋ฆฌ ํธ๋ฆฌ๋ฅผ ๊ฒ์ํ์ง ์์ต๋๋ค. ํ์ผ์ ์ง์ ์ง์ ํ๋ฉด ์ฌ์ ํ ๋งค์ฐ ๋๋ฆฝ๋๋ค.
์ ์ด๋ ์๋ ์ ํ์ ์์ธ์ ๋ํ ์์ด๋์ด๊ฐ ์์ต๋๊น? (์ ๋ JSX/CoffeeScript๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค. ์๋ ๋ชจ์ ๊ธฐ๋ฅ์ด ๊บผ์ ธ ์์ต๋๋ค.)
์ฒซ ๋ฒ์งธ ์ธ์๊ฐ ํญ์ true๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ์๋ ์์ ๋ ์ ์๊ฒ ํจ๊ณผ๊ฐ ์์์ต๋๋ค.
var ReactTools = require('react-tools');
var MAGIC = "/** <strong i="6">@jsx</strong> ";
module.exports = {
process: function(src, file) {
if (src.slice(0, MAGIC.length) != MAGIC) return src;
return ReactTools.transform(src);
}
};
@culshaw @haihappen ์ข์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. 10s+ ํ ์คํธ๋ฅผ 2+๋ก ์ค์ด์ญ์์ค. ์ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ฐ์ ํ์ผ์ ํ์ฅ์ _.jsx/_.react.js๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๊ณ ์๊ฐํ๊ฒ ๋ง๋ค์์ต๋๋ค. ๋ฐ์ ํ์ผ์ ์ฌ์ฉํ ๋๋ ๋์์ด ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์์งํ ๋งํด์ Grunt๋ฅผ ํตํด ๋๋ ์ฌ์ ํ +20s์ ์๊ฐ์ ์ป์์ต๋๋ค.
Karma๋ก ์์
ํ๋ ๋ฐ์ ๋ฐ ์ด ์๊ฐ์ ์ฝ +4/5์ด์
๋๋ค.
๋ชจ๋ VM ๋ด๋ถ์ ์์ง๋ง
์ด๊ฒ์ ๋ํด ๋ค์ ๋ณด๊ณ ํ๊ธฐ ์ํด์์ ๋๋ค. ์ฐ๋ฆฌ๋ Karma/Mocha๋ก ๋ฐ์์ ํ ์คํธํ๊ณ ์์ผ๋ฉฐ 700๊ฐ์ ๊ฐ๊น์ด ํ ์คํธ์ด๋ฉฐ ๋ชจ๋ ํ ์คํธ๋ฅผ ์คํํ๋ ๋ฐ ์ฝ 4์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค. ์ฐ๋ฆฌ๋ ๋ชจ์๋ฅผ ์ฒ๋ฆฌํด์ผ ํ์ง๋ง ๊ทธ๋งํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๋ฐ์์ ํ๋ฅญํ์ต๋๋ค. ํ ์ก์ ๋ฐ ์์ด ์์พํ๊ฒ ์์ ์ ์ ๋๋ค. ๊ฒ์ ์ฒด์ธ์ ! ์ฐ๋ฆฌ ํ์ ๋ค๋ฅธ ๊ฒ์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์งํ ์ ์์์ต๋๋ค.
๋๋ Jest๊ฐ ๋น ๋ฅด๋๋ก ํ ์ ์ด ์๋ค. ์ ๋ ๋ชจ์นด๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. Jest๊ฐ ๋นจ๋๋ค๋ฉด ๋๋
๋์ ์ฌ์ฉํ์ ๊ฒ์
๋๋ค.
2015๋
2์ 5์ผ ๋ชฉ์์ผ ์คํ 12์ 17๋ถ, Gil Birman [email protected]
์ผ๋ค:
@iamrandys https://github.com/iamrandys
์ด๋ป๊ฒ ๊ทธ๋ ๊ฒ ๋นจ๋ฆฌ ๋๋ด์ ํ ์ ์์๋์ง ์์ธํ ์๋ ค์ฃผ์ธ์.โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/facebook/jest/issues/116#issuecomment -73097182.
@iamrandys ์๊ฒ ๊ฐ์ฌํฉ๋๋ค. ๋ด "์ด๋ป๊ฒ ๋นจ๋ฆฌ ๋๋ด์ ํ๊ฒ ๋์๋์?"๋ฅผ ์ญ์ ํ์ต๋๋ค. ๋ด๊ฐ ๋น์ ์ ๊ฒ์๋ฌผ์ ์๋ชป ์ฝ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์ ํ์ ์ง๋ฌธ(ํ์ง๋ง ๋น์ ์ ๋์์ ์๋ตํ์ต๋๋ค)... ์ด์จ๋ , ๊ทธ๊ฒ์ ๋ถ๋๋ฌ์ด ์ผ์ ๋๋ค. ์ ์๊ฐ์๋ ๋๋ด์ด ์ฌ์ ํ ํ๋ก๋์ ์ ์ฌ์ฉํ ์ค๋น๊ฐ ๋์ง ์์ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋์ด์ผ ํฉ๋๋ค.
@haihappen ๋ฐ @darcyadams ์ ํด๊ฒฐ ๋ฐฉ๋ฒ/๋ณ๊ฒฝ ์ฌํญ์ ๋จ์ผ ํ ์คํธ์ ๋ํด ํ ์คํธ ์๊ฐ์ 3.5์ด์์ ์ฝ 1์ด๋ก
๋๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์์ ํ๋ก์ ํธ์์ ๋จ 3๊ฐ์ ํ ์คํธ๋ฅผ ๋ฐ์๊ณ 3์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค.
ํ๋ก์ ํธ ๋ก๋๋งต์ ์ด๋ ๋ถ๋ถ์์๋ ์ฑ๋ฅ์ ๊ฐ์ ํ๊ณ ์์ต๋๊น?
BTW: ๋ณ๊ฒฝ๋ ํ์ผ์ ๋ํด์๋ง ๋จ์ ํ ์คํธ๋ฅผ ๋ค์ ์คํํ๋ (๋งค์ฐ ํดํน ๊ฐ์) ๋ฐฉ๋ฒ์ ์ฐพ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์คํํ ํ ์คํธ๊ฐ ํ๋๋ฟ์ด๋ฏ๋ก ๋ค์ ๋งค์ฐ ๋นจ๋ผ์ง๋๋ค. ์ฌ๊ธฐ์ ๋ฃ์ด: https://gist.github.com/mik01aj/fefb7718331e5454b9d1
Strange Jest๋ React.js 2015 conf์์ ์ธ๊ธ๋์ง ์์์ต๋๋ค.
testPathDirs๊ฐ ๋ฒ์ธ์ผ๋ก ๋ณด์ ๋๋ค. package.json์์ ๋ค์๊ณผ ๊ฐ์ด ์ง์ ํฉ๋๋ค.
"jest": {
"unmockedModulePathPatterns": [
"./node_modules"
],
"scriptPreprocessor": "./preprocessor.js",
"testDirectoryName": "tests",
"testPathDirs": ["tests"]
}
@adjavaherian ์๋ ์กฐ๋กฑ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์กฐ์ฌ ํ์ญ์์ค :
์ค์ ๋ก testPathDirs๊ฐ ์ข ์์ฑ์ ํฌํจํ์ง ์์ผ๋ฉด ์๋ ์กฐ๋กฑ์ด ๋ฏธ๋ฌํ๊ณ ์ค๋ง์ค๋ฌ์ด ๋ฐฉ์์ผ๋ก ์ค๋จ๋ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
์ด๋ฌํ ์ฐ๋ ค๋ก ์ธํด ํ
์คํธ ์ค์ ์ ๋ฌธ์ ๊ฐ ์์ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ด๊ฐ ์ฌ๊ธฐ์์ ํ๋ฆด ์๋ ์์ง๋ง ๋ด๊ฐ ์๋ ํ ์ฐ๋ฆฌ๋ ๋ชจ๋ beforeEach ํ
์คํธ ๋ด์์ ๋ค๋ฅธ ํ์ ๋ชจ๋๊ณผ ํจ๊ป var component = React.createFactory(require("component/path"))
์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ํ์คํ ์ด๊ฒ์ด ๋ชจ๋ ํ
์คํธ์ ํ์ํ ๊ฒ์ ์๋๋๋ค. ๊ณต์ฅ์ ๋งค๋ฒ ์๋ก์ด ๋ถํ์ ์์ฐํด์ผ ํฉ๋๋ค. ๋ด๊ฐ beforeEach ๋ธ๋ก ํ
์คํธ ์๋๋ฅผ 10๋ฐฐ ์ฆ๊ฐ์ํต๋๋ค. ๋ถํํ๋ ์ด ๊ฒฝ์ฐ ์ผ๋ถ ํ
์คํธ๊ฐ ์ด์ํ๊ฒ ์คํจํ๋๋ฐ ๊ทธ ์ด์ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ด๊ฒ์ด ๋์์ด ๋๋์ง ํ์คํ์ง ์์ต๋๋ค. ์๊ฐ?
๋ณด๊ณ ๋ ํ ์คํธ ์คํ ์๊ฐ์์ ์ ์ฒ๋ฆฌ ์๊ฐ์ ์ ์ธํ๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ๊ทธ ์์ ์ ๋๋ถ๋ถ์ด ๋ณํ ๋จ๊ณ์์ ๋์ค๋ ๊ฒฝ์ฐ ๋นจ๊ฐ์์ ๋ณด๋ ๊ฒ์ ๋ถ๊ณตํํฉ๋๋ค.
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ,
๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์คํํ๋ ๋ฐ ์ฝ 1๋ถ์ด ๊ฑธ๋ฆฌ๋ ํ ์คํธ ์ผ์ด์ค๋ ์์ต๋๋ค.
์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์ด๋์๋ถํฐ ์์ํด์ผ ํ ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ํํธ๊ฐ ์์ต๋๊น?
๋ด VM ํ๊ฒฝ์์๋ง ๋ํ๋๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค(cf : http://stackoverflow.com/a/13703132). ์ด์ ํ ์คํธ๋ ์ฌ์ ํ ๋ด๊ฐ ์์ํ ๊ฒ๋ณด๋ค ๋๋ฆฌ์ง๋ง ๋ฐฉ๋์ ์์ ์ด์ ๋ณด๋ค ํจ์ฌ ๋น ๋ฆ ๋๋ค(๋ด ํ ์คํธ ์ํธ์ ๊ฒฝ์ฐ 60์ด -> 6์ด)
์๋๊ฐ ์ฌ์ ํ ๋ฌธ์ ๋ผ๋ฉด Mocha๋ก ์ด๋ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด ํฌํฌ๋ก ๋ง์ ์ฑ๊ณต์ ๊ฑฐ๋์์ต๋๋ค. ์ฌ๊ธฐ์์๋ ๋จ์์์ ๋ณต์กํ React ๋ฐฐํฌ์ ๋ํ ํ ์คํธ๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. https://github.com/adjavaherian/mocha-react ์ฐ๋ฆฌ๋ ์ฝ 3์ด ๋์ 100๊ฐ ์ด์์ ํ ์คํธ๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์คํํฉ๋๋ค.
๋๋ Mocha๊ฐ ๊ฐ ๊ธธ์ด๋ผ๋ ๋ฐ ๋์ํฉ๋๋ค. ์ต๋ ๊ฑฐ์ 900๋ฒ์ ํ ์คํธ๋ฅผ ์ํํ๋ฉฐ ์ฝ 4์ด๊ฐ ์์๋ฉ๋๋ค.
2015๋ 4์ 23์ผ ์คํ 4์ 53๋ถ์ Amir Djavaherian [email protected]์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
์๋๊ฐ ์ฌ์ ํ ๋ฌธ์ ๋ผ๋ฉด Mocha๋ก ์ด๋ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด ํฌํฌ๋ก ๋ง์ ์ฑ๊ณต์ ๊ฑฐ๋์์ต๋๋ค. ์ฌ๊ธฐ์์๋ ๋จ์์์ ๋ณต์กํ React ๋ฐฐํฌ์ ๋ํ ํ ์คํธ๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. https://github.com/adjavaherian/mocha-react ์ฐ๋ฆฌ๋ ์ฝ 3์ด ๋์ 100๊ฐ ์ด์์ ํ ์คํธ๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์คํํฉ๋๋ค.
โ
์ด ์ด๋ฉ์ผ์ ์ง์ ํ์ ํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
๊ฐ์ ๊ฒฝํ์ผ๋ก Jest๋ฅผ ๋จ ํ๋์ ํ ์คํธ(JSX ์ฌ์ฉ)๋ก ์ค์ ํ๊ณ ์ฝ 3์ด๊ฐ ์์๋ฉ๋๋ค.
@iamrandys ์ค์ ์์๋ฅผ ๋ณด์ฌ์ฃผ์๊ฒ ์ต๋๊น? ์๋ฒฝํ ์ฝค๋น์ธ ๊ฒ ๊ฐ์ต๋๋ค.
@amasad babel-loader๊ฐ cacheDirectory ์ต์ ์์ ํ์ฉํ๋ ๊ฒ๊ณผ ์ ์ฌํ ์ปดํ์ผ๋ ํ์ผ์ ๋ํ ์บ์๋ฅผ ๊ตฌ์ถํ๋ Jest ์ต์ ์ด ์์ต๋๊น? - https://github.com/babel/babel-loader#options
์ ์๊ฒ ๋๋ด์ ๋๋ฆฌ๊ฒ ๋ง๋๋ ๊ฒ์ ์ปดํ์ผ์ด ์๋๋ผ ์์
์ ํ ํ๋ก์ธ์ค์ ์์์
๋๋ค. ๋ด ๋ชจ๋ ํ
์คํธ๋ ์ฝ 4์ด๊ฐ ๊ฑธ๋ฆฌ๋ ์ฒซ ๋ฒ์งธ ํ
์คํธ๋ฅผ ์ ์ธํ๊ณ 0.05์ด ์ด๋ด์ ํต๊ณผํฉ๋๋ค.
https://github.com/jeffmo/node-worker-pool
https://github.com/facebook/jest/blob/master/src/TestRunner.js#L376
@songawee ์ ํ๋๋ฐ PR์ ๋ณด๋ด์ ์ต์ ์ผ๋ก ๊ฐ๊ณ ์ถ๋์? ์บ์๋ฅผ ๊นจ์ผ ํ ๋๋ฅผ ์๋ ๊ฒ์ด ๋๋๋ก ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ผ์ ธ ์์ด์ผ ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ปดํ์ผ๋ฌ ์ต์ ์ ๋ณ๊ฒฝํ๋ฉด ์บ์๊ฐ ์ฌ์ค์ ๋์ด์ผ ํฉ๋๋ค. ๋ ๋ค๋ฅธ ์ต์ ์ ์บ์ฑ ์ธ์ ์บ์ ์ฌ์ค์ ์ต์ ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
@doodzik node-haste
๋ชจ๋์ ๋งํ๊ณ ์ฝ๋ ๊ฒ์ด ์๋๋ผ ์์
์ ํ์ด๋ผ๊ณ ํ์ ํฉ๋๊น?
@amasad ๋ด๊ฐ ํ ๊ฒ์ jest
์คํ์ ๊ฐ ๋จ๊ณ๊ฐ ์๋ฃ๋๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ธก์ ํ ๊ฒ์
๋๋ค.
๊ทธ๋ฆฌ๊ณ node-worker-pool
๋ ํ
์คํธ๊ฐ ๋๋ฆฐ ๋ง์ง๋ง ์ธ์คํด์ค์์ต๋๋ค.
๋ด ๋ฐ๊ฒฌ์ด ๋จ์ง ์ฆ์์ผ ๋ฟ ๋ฌธ์ ์ ๊ทผ์์ด ์๋ ์๋ ์์ต๋๋ค.
ํ์ง๋ง ์ ๋๋ก ๋ถ์ํ ์๊ฐ์ด ์์๋ค.
๋ด ํ
์คํธ๋ ํ์ฌ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ด ๋ฐ์ ํ ์คํธ๋ ๋๋ฆฝ๋๋ค(์์ ํด๋์ ์๋ ํ ์คํธ). ๋ด๊ฐ ๋งํ๋ ๊ฒ์ ๋ฌด๋ฐ์ ํ ์คํธ์ ๋๋ค.
+1
์ฌ๊ธฐ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ํ ์คํธ๊ฐ ๋งค์ฐ ๋๋ฆฝ๋๋ค. ์ค๋ง:
๋ฌธ์ ์ ์ง๋ฉดํ ์ฌ๋์ ๋๋ฟ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค. Jest๋ฅผ ์ฒ์ ์ฌ์ฉํ๊ณ ํ ์คํธ ๊ฒฐ๊ณผ๊ฐ ๋น ๋ฅด์ง ์์ต๋๋ค. Facebook์ด Jest๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธํ๋ ๋ฐฉ๋ฒ์ด ๊ถ๊ธํ์ญ๋๊น?
React Europe ์ปจํผ๋ฐ์ค Q&A ์ธ์ ์์ React ์ฌ์ฉ์์ ๋ํ Jest ๊ฐ์ ์ฌํญ์ ๋ํ ๋ด ์ง๋ฌธ - https://youtu.be/CRJZBZ_-6hQ?t=363
๋ชจ์นด+์๋ ผ์ผ๋ก ๋ฐ๊ฟจ์ต๋๋ค. ๊ฒฐ์ฝ ๋ ํ๋ณตํ์ง ์์์ต๋๋ค.
2015๋ 8์ 31์ผ 17:45 Alan Rubin [email protected] ์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
React Europe ์ปจํผ๋ฐ์ค Q&A์์ Jest to React์ ๋ํ ๋ด ์ง๋ฌธ
์ธ์ - https://youtu.be/CRJZBZ_-6hQ?t=363โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/facebook/jest/issues/116#issuecomment -136394910.
๋๋ ๊ฐ์ ๋ฌธ์ ๋ฅผ ์๊ณ ์์ด. Jest ํ ์คํธ๋ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๊ณ ์คํ ์๊ฐ์ ์ค์ ๋ก ๋ค์ํฉ๋๋ค. ๋ณ๋ ฌ๋ก ์คํํ ์ง ์๋๋ฉด ํ๋์ ํ๋ก์ธ์ค(--runInBand)์์ ์คํํ ์ง ์ฌ๋ถ๋ ์ค์ํ์ง ์์์ต๋๋ค. ์์ ์ ํ๋ก์ธ์ค ๊ฐ์ ๋ฆฌ์์ค ๊ฒฝํฉ์ด ์๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
v8 ํ๋กํ์ผ๋ฌ(https://github.com/node-inspector/v8-profiler)๋ก CPU ๋คํ๋ฅผ ์์ฑํ๊ณ ๋๋ถ๋ถ์ ์๊ฐ์ด ๋ชจ๋์ ์กฐ๋กฑํ๋ ๋ฐ ์๋น๋๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ์ฆ, ๋ด ๋จ์ ํ ์คํธ ์คํ ์๊ฐ์ 25%๊ฐ jest-cli/src/lib/utils.js#runContentWithLocalBindings์์ ์๋น๋ฉ๋๋ค.
์ฑ๋ฅ ์
๋ฐ์ดํธ๊ฐ ์์ต๋๊น? ๋ฐฉ๊ธ es6 ๋ฐ babel-jest๋ก ๋๋ด์ ์ฃผ์ ์ง๋ง > 10์ด ์์ 2๊ฐ์ ๊ฐ๋จํ ํ
์คํธ๋ฅผ ์คํํ์ต๋๋ค :-(
์๋๋ฅผ ๋์ด๊ธฐ ์ํด ์ด ์ค๋ ๋์์ ๋ง์ ์์ด๋์ด๋ฅผ ์๋ํ์ง๋ง ์๋ฌด ๊ฒ๋ ํจ๊ณผ๊ฐ ์์์ต๋๋ค...
์ฐ๋ฆฌ๋ ๊ณง ์ด๊ฒ์ ์ง์คํ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ง๊ธ ๋๋ด์ ๋ํ ์์ ์ผ๋ก ์ฝ๊ฐ ์ ์ด ์์ง๋ง ๋ ๋ฉ์ง๊ฒ ๋ง๋ค๊ธฐ ์ํด ์ต์ ์ ๋คํ๊ณ ์์ต๋๋ค.
์ปค๋ฎค๋ํฐ์์ ๋์์ ์ค ์ ์๋ ์์ ์ด ์์ต๋๊น?
+1
ํ์ฌ ๊ฐ์ฅ ํฐ ๋์์ ์ค์ ๋ก ๋ฌธ์, ์น ์ฌ์ดํธ๋ฅผ ๊ฐ์ ํ๊ณ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์คํ ์์ค์์ ์ฌ๋๋ค์ ๋๋ ๊ฒ์ ๋๋ค.
๋น๋ ํ์ดํ๋ผ์ธ์์ JEST ํ ์คํธ ์๋๋ฅผ ๋์ด๊ธฐ ์ํด ์ํํ ํ ๊ฐ์ง๋ ๋จ์ผ ์ฝ์ด ์์คํ ์ ๋ค์ค ์ฝ์ด ์์คํ ์ผ๋ก ๊ต์ฒดํ๋ ๊ฒ์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก jest๋ ์ฌ์ฉ ๊ฐ๋ฅํ ํ๋์จ์ด ์ค๋ ๋ ์๋งํผ ์์ ์๋ฅผ ์์ฑํฉ๋๋ค. ์ด๊ฒ์ด ๊ฐ๋ฅํ์ง ์์ ๊ฒฝ์ฐ '-w'(maxWorkers)๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก ์ฌ์ํ ์ ์์ต๋๋ค. ๋จ์ผ ์ฝ์ด์์๋ ์๋ ํฅ์์ ์ป์ ์ ์์ต๋๋ค.
๊ถ๊ทน์ ์ผ๋ก ์ฐ๋ฆฌ๋ ๋ชจ์ ๋ชจ๋์ด ๋งค์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค๊ณ (์์ ๋ด ์ค๋ช ์ฐธ์กฐ) ๋๋ถ๋ถ์ ์คํ ์๊ฐ์ ์ ๋ฐํ๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
๋๋ฅผ ์ํด es6์ ์ฌ์ฉํ๋ Jest๋ ์์ ํ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์์ํ๋ ๋ฐ๋ง 10์ด ์ด์์ด ๊ฑธ๋ฆฌ๊ณ ํ์ฌ ๊ฐ์ง๊ณ ์๋ ๋จ์ผ ํ ์คํธ๋ฅผ ์คํํ๋ ๋ฐ 2์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค. ๋๋ ์นด๋ฅด๋ง๋ก ๋ค์ ์ ํํ์ฌ ํจ์ฌ ๋ ๋ง์ ๊ฒ์ ๊ธฐ๋ํ์ต๋๋ค :(
์ฐ๋ฆฌ๋ ํ์ฌ node-haste๋ฅผ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ๋ ์๋ก์ด ๋ชจ๋ ํด์๊ธฐ๋ก ๊ต์ฒดํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค.
์๋ ๋ชจ๋. ์ด ๋ฌธ์ ์ ๋ํ ์์์ด ์์ต๋๊น?
์๋ ํ์ธ์, Jest๋ ๋น React ํ ์คํธ์ ์ ํฉํฉ๋๊น? ์ฐ๋ฆฌ ํ์์ ๋ฐ์ ์ฑ๊ณผ ๋ฐ์ํ์ง ์๋ ์ฑ ๋ชจ๋์ ๋ํ ๊ณตํต ํ์ค์ ๊ฐ๊ณ ์ถ์ต๋๋ค.
Jest๋ ๋ณดํธ์ ์ธ ํ ์คํธ ์คํ๊ธฐ์ด๋ฉฐ React๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์ ํ ์์ต๋๋ค. :) ์์ ์ค ํ๋๋ฅผ ์ดํด๋ณด์ญ์์ค!
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ, ์ฌ๊ธฐ์ ๋ช ๊ฐ์ง ํฅ๋ฏธ๋ก์ด ์ ๋ณด๊ฐ ์์ต๋๋ค. ๋ํ ํ ์คํธ๊ฐ ๋๋ฆฌ๊ฒ ์คํ๋๋ ๋ฌธ์ ๋ ๊ฒช๊ณ ์์ต๋๋ค. ํ์ฌ ์คํํ๋ ๋ฐ ~15์ด๊ฐ ๊ฑธ๋ฆฌ๋ 13๊ฐ์ ํ ์คํธ๊ฐ ์์ต๋๋ค.
์ ๋ packages.json ํ์ผ์ "testPathDirs": ["<rootDir>/path/to/tests/"]
๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์์ ์๊ฐ์ ์๋นํ ๊ฐ์ ํ๋ ๋ฐ ๋์์ด ๋๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
@cpojer ์๋กญ๊ณ ํฅ์๋ ๋ชจ๋ ๋ฆฌ์กธ๋ฒ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น? ์ด๊ฒ์ด ํ ์คํธ๋ฅผ ํจ์ฌ ๋ ๋น ๋ฅด๊ฒ ์คํํ๋ ์ด์ ๊ฐ ๋๊ธฐ๋ฅผ ์ง์ฌ์ผ๋ก ๋ฐ๋๋๋ค.
์ด ์์ ์ #599์์ ์งํ๋ฉ๋๋ค.
@cpojer ๊ฐ์ฌ
์์ฑ๋ Haste2๋ฅผ ๊ธฐ๋ํฉ๋๋ค
๋ชจ์นด๋ฅผ ์ฌ์ฉํ ๋์ผํ ํ ์คํธ๊ฐ 44ms๋ก ์คํ๋์์ผ๋ฉฐ ๋๋ด์ด 6์ด๊ฐ ๊ฑธ๋ ธ์ต๋๋ค.
jest
๋ฅผ ์ฌ์ฉํ์ฌ ์ด๊ธฐ 6๊ฐ์ ํ
์คํธ ํ์ผ์ Mocha
, jsdom
๋ฐ sinon
์ฌ์ฉ์ผ๋ก ์ ํํ๋ ๋ฐ ์ฝ 15๋ถ์ด ๊ฑธ๋ ธ์ต๋๋ค.
์ข์ ์์์ ๋๋ค. ์ค๋ #599๋ฅผ ๋ณํฉํ๊ณ ๋ง์นจ๋ด ๋๋ฆฐ ์์์ ์์ ์ผ ํฉ๋๋ค.
์ข์, ์ด๊ฒ์ Jest 0.9์์ ๋ง์นจ๋ด ์์ ๋์ด์ผ ํ๋ค. ์๊ฐ์ด ์ค๋ ๊ฑธ๋ ค์ ์ฃ์กํ์ง๋ง Jest์๋ ์ฝ๊ฐ์ ๊ด๋๊ฐ์์์ต๋๋ค :)
React ํ
์คํธ ์์ฒด์ ์๋๋ฅผ ๋์ด๋ ๋ฐฉ๋ฒ์ https://github.com/facebook/react/pull/6052 ๋ฅผ ์ฐธ์กฐ jest-cli@next
๋ก ํ๊ทธ๊ฐ ์ง์ ๋์ด ์์ต๋๋ค. ํด๊ฒฐ๋๋ ๋๋ก ์ด ๋ฌธ์ ๋ฅผ ์ข
๋ฃํ๊ฒ ์ต๋๋ค.
npm install jest-cli@next
์ด ์ ๋ฒ์ ์ ์คํํ๋ ค๋ ๊ฒฝ์ฐ( jest@next
@cpojer ๋์ )
์ค ์, ํญ์์ด ์ค์๋ฅผํฉ๋๋ค :) ์๋ ์๊ฒฌ์ ์์ ํ์ต๋๋ค.
npm install jest-cli@next
์ฌ์ฉํ์ฌ ์
๊ทธ๋ ์ด๋ํ ํ @cpojer dontMock
์ง์ ํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฆ, ์
๋ฐ์ดํธ ์ ์([email protected] ์ฌ์ฉ) ์ด ์ค์ด ์ ๋๋ก ์๋ํฉ๋๋ค.
jest.dontMock('../../../../fixtures');
๊ทธ๋ฐ ๋ค์ 0.9.0์ผ๋ก ์ ๋ฐ์ดํธํ ํ ๋์ผํ ํธ์ถ๋ก ์ธํด ๋ชจ๋์ด ์กฐ๋กฑ๋ฉ๋๋ค.
@steinbachr ์๋ง๋ ๋ณ๋์ ๋ฌธ์ ๋ก ๊ฐ์ผํฉ๋๋ค. ์ฌํ์ ์ ๊ณตํ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ์ด ๋ฌธ์ ๊ฐ FB์ ์ฌ๋ผ์ค๋ ๊ฒ์ ๋ณธ ์ ์ด ์์ต๋๋ค!
๊ฐ์ฌํฉ๋๋ค @cpojer , ์ฌ๊ธฐ์์ ์์ฑ๋ ๋ฌธ์
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ด ํ ์คํธ๋ ์ง๊ธ๊น์ง ๊ถ์ฅ๋ ๋ชจ๋ ์ต์ ํ๋ฅผ ์ฌ์ฉํ ํ์๋ 14์ด์ ๋๋ค. 16GB RAM๊ณผ SSD๋ฅผ ์ฌ์ฉํ๋๋ผ๋. Jest๋ ํ์ฌ ์ํ์์ ์์ ํ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฃ์กํฉ๋๋ค. Karma๋ก ์ ํํฉ๋๋ค.