Jest: рдзреАрдореА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд░реАрдХреНрд╖рдг

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рдЕрдЧре░ 2014  ┬╖  80рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: facebook/jest

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдЬреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдХреЙрдореНрдмреЛ рдкреНрдпрд╛рд░ред рд╡реИрд╕реЗ рднреА, рдореБрдЭреЗ _livereload_ рдореЛрдб рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреА рдЖрджрдд рд╣реИред рддреЛ рдЬрдм рднреА рдХреЛрдИ рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдпрд╣ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЪрд▓рдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ 3 рд╕реЗрдХрдВрдб рд▓рдЧ рд░рд╣реЗ рд╣реИрдВред рд╡рд╣ рд╕рд┐рд░реНрдл рдПрдХ рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд╣реИред рдореИрдВ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╛рдЗрд▓реЗрдВ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдпрд╣реА рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдХреИрд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдП рдпрд╛ рдЯреАрдбреАрдбреА/рдмреАрдбреАрдбреА рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рдХреЛ рдХреИрд╕реЗ рддреЗрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╕рд▓рд╛рд╣ рд╣реИ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг 14 рд╕реЗрдХрдВрдб рд▓рдВрдмреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрдм рддрдХ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╕рднреА рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреАред рд╡реЛ рднреА 16GB рд░реИрдо рдФрд░ SSD рдХреЗ рд╕рд╛рдеред рдЬреЗрд╕реНрдЯ рдЕрдкрдиреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдкрдпреЛрдЧреА рд╣реИред рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдХрд░реНрдо рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ред

рд╕рднреА 80 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣рд╛рдп рдЯрд╛рдпрд░рдиред рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП 20+ рд╕реЗрдХрдВрдб рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдереА :)
рдмрд╛рдд рдпрд╣ рдереА рдХрд┐ рдореИрдВрдиреЗ рд░реВрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ 'рдЬреЗрд╕реНрдЯ' рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИред рдФрд░ рдРрд╕реЗ рдмрд╣реБрдд рд╕реЗ рдЙрдкрдЦрдВрдб рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЬреЗрд╕реНрдЯ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рд░рд╣рд╛ рдерд╛ред рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЗрд╕ рдмрд╛рд░ рдЕрдм 10 рдЧреБрдирд╛ рд╕реЗ рдЕрдзрд┐рдХ рдХрдо рд╣реЛ рдЧрдпрд╛ рд╣реИред рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдХреЙрдлреА рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рднреА рд╣реИред рдкреИрдХреЗрдЬ рдореЗрдВредjson
"рд╕реНрдХреНрд░рд┐рдкреНрдЯ": {
....
"рдЯреЗрд╕реНрдЯ": "рдЬреЗрд╕реНрдЯ рдкрде/рд╕реЗ/рдореЙрдбреНрдпреВрд▓/рд╕реЗ/рдкрд░реАрдХреНрд╖рдг"
}

BTW, рдХреНрдпрд╛ рдЖрдк рдХреЙрдлреА рдХреЛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдХреНрдпрд╛? :)

рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд╛рдкрд╕ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж @gothyред рдореИрдВ JSX рдХреЗ рд╕рд╛рде рдирд┐рдпрдорд┐рдд JS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬреЗрдПрд╕рдПрдХреНрд╕ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ (https://github.com/facebook/jest/tree/master/examples/react)ред рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЪрд▓рдиреЗ рдореЗрдВ рднреА рд▓рдЧрднрдЧ 2.5 - 3 рд╕реЗрдХрдВрдб рдХрд╛ рд╕рдордп рд▓рдЧ рд░рд╣рд╛ рд╣реИред JQuery рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрдХ рд╕реЗрдХрдВрдб рд╕реЗ рднреА рдХрдо рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рдХреНрдпрд╛ JSX рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдорддрд▓рдм рдЖрдкрдХреА JSX рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЗрддрдирд╛ рд╕рдордп рд▓реЗрдирд╛ рд╣реИ?

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд░реАрдХреНрд╖рдг

screen shot 2014-08-08 at 1 46 05 pm

jQuery рдЯреЗрд╕реНрдЯ

screen shot 2014-08-08 at 1 54 55 pm

рдЖрд╣, рдореИрдВрдиреЗ рдЗрд╕реЗ JSX рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЗрд╕ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗред рд╢рд╛рдпрдж рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдзреАрдорд╛ рд╣реИред рдореБрдЭреЗ рдкреБрд░рд╛рдиреА рдЪреАрдЬреЛрдВ рдХреЗ рднрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реА рд╣реИ :)

рдореИрдВрдиреЗ рдХреЙрдлрд╝реАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдЖрдкрдХреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рднреА рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕реА рдЪреАрдЬреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдзреАрдореЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рднреА рдЕрдиреБрднрд╡ рдХрд░рддрд╛ рд╣реВрдВ :(

рдореИрдВ рд╡рд╣реА рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реИ (рдЗрд╕ рдЫреЛрдЯреА рдлрд╝рд╛рдЗрд▓ рдкрд░ JSX рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рддреЗрдЬрд╝ рд╣реИ)ред рдореИрдВрдиреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд╕рднреА рдХреЛрдб рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреА, рд╕рд┐рд╡рд╛рдп рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдЕрднреА рднреА 4 рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВред рдЬреИрд╕реЗ рд╣реА рдореИрдВ рдЙрди рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рддрд╛ рд╣реВрдВ, рдкрд░реАрдХреНрд╖рдг рдореЗрдВ 0.1s рд▓рдЧрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдереЛрдбрд╝реА рдЦреБрджрд╛рдИ рдХреА рдФрд░ рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХрд┐ HasteModuleLoader рдХреЛ 490 рдЖрд╡рд╢реНрдпрдХ рдкреИрдХреЗрдЬ (_ shouldMock ()) рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╣реИ рдФрд░ рдЬрдм рдЖрдкрдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ / рдПрдбрдСрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рддреЛ рдЙрдирдХрд╛ рдордЬрд╛рдХ рдирд╣реАрдВ рдЙрдбрд╝рд╛рддреЗред

var React = require('react/addons');

рдпрд╛

var CheckboxWithLabel = require('../CheckboxWithLabel.js');

рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд var React = require('react/addons'); рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рдЕрднреА рднреА рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╛рдЗрд▓реЗрдВ рдЪрд▓рд╛рдИрдВред рдореБрдЭреЗ рд╢рд╛рдпрдж 0.2 рд╕реЗрдХрдВрдб рдХрд╛ рд╕реБрдзрд╛рд░ рдорд┐рд▓рд╛ред рдЕрдЧрд░ рдореИрдВрдиреЗ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддреЗ рд╣реИрдВ:

JSX рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рд╛рде
screen shot 2014-08-10 at 5 35 22 pm

JSX рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдмрд┐рдирд╛
screen shot 2014-08-10 at 5 34 12 pm

рдореИрдВ рдЬреИрд╕реНрдореАрди рдкрд░ рдореЛрдЪрд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдПрдХ рдЧрд▓реНрдкрдлрд╛рдЗрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдЧрд╛ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдореЛрдЪрд╛ рдЯреЗрд╕реНрдЯ рд╕реВрдЯ (рдиреАрдЪреЗ рд╕реНрдирд┐рдкреЗрдЯ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рдПрдЧрд╛ред

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' }));
}

рдЗрд╕реЗ рдЕрднреА рднреА JSX рдлрд╝рд╛рдЗрд▓ рдХреЛ рд░рд┐рдПрдХреНрдЯрд┐рдлрд╝рд╛рдЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдзреАрдореЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдиреА рд╕рдВрджреЗрд╢ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред рддреЛ рд░рдирдЯрд╛рдЗрдо рдЕрднреА рднреА 2 рд╕реЗрдХрдВрдб рд╕реЗ рдХрдо рд╕рдордп рд▓реЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░реАрдХреНрд╖рдг рд▓рдЧрднрдЧ 32ms рд╣реИред рдЕрднреА рднреА рддрдп рдХрд░рдирд╛ рд╣реИ рдХрд┐ JSX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдУрд╣ рддреБрдо рд╕рд╣реА рд╣реЛред рдореИрдВрдиреЗ JSX рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЬреЗрд╕реНрдЯ рд░рд┐рдПрдХреНрдЯ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдХрд░реАрдм 4 рд╕реЗрдХрдВрдб рд╕реЗ рдиреАрдЪреЗ 0.75 рд╕реЗрдХрдВрдб рддрдХ рдЪрд▓рд╛ рдЧрдпрд╛ред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ JSX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рдПрдХ рдмрдбрд╝реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░, рдЬрдм рддрдХ рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреИрдХреЗрдЬ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рддрдм рддрдХ рдпрд╣ рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рдзреАрдорд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рднреА 490 рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреАред рдЙрд╕ рд╕рд╛рдзрд╛рд░рдг рдШрдЯрдХ рдХреЗ рд▓рд┐рдП 3 рд╕реЗрдХрдВрдб рд▓рдЧрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрдиреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рд▓рд┐рдП рддреЗрдЬрд╝ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдЕрднреА рднреА рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╕реВрдЯ рдХреИрд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПред рдЪрдореЗрд▓реА рдореЗрдВ рдореИрдВ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдпрд╛ рд╕реВрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП "рд╡рд░реНрдгрди" рдФрд░ "рдЗрд╕реЗ" рдХреЗ рдмрдЬрд╛рдп "ddescribe" рдпрд╛ "iit" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдЬреЗрд╕реНрдЯ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рдореБрдЭреЗ рдЕрднреА рдПрдХ рддреЗрдЬрд╝ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

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; 

@ рдЬреЗрдлрдЪрди рд╕рд╣реА рдерд╛ред рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рди рдХрд┐ рдХреЗрд╡рд▓ JSX рдлрд╛рдЗрд▓реЗрдВред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХреЗрд╡рд▓ рдмрджрд▓реА рд╣реБрдИ JSX рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рджреЗрдЦрдирд╛ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛ред рддрдм рд╣рдо рдХреЗрд╡рд▓ рдЙрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рднреА рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЗрд╕ рддрд░рд╣ рдЬреЗрдПрд╕рдПрдХреНрд╕ рдлрд╛рдЗрд▓реЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдпрдВрддреНрд░рдг рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХрдИ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

gulp jest --tests "Checkbox*,*Form*"

Watchify рддрдм рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдЧрд╛ рдЬрд┐рд╕ рдкрд░ рдпреЗ рдкрд░реАрдХреНрд╖рдг рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЗрд╡рд▓ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдХреЗрд╡рд▓ рдЙрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдореИрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рд╣рд╛рдВ, рдореИрдВ рдЧрд▓реНрдк рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдХреИрд╢рд┐рдВрдЧ рдкрд░рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ
рдХрд╛рдо рдкрд░

11 рдЕрдЧрд╕реНрдд 2014 08:35 рдХреЛ, рдЯрд╛рдЗрд░реЛрди рдЕрд╡рдиреАрдЯ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@iamrandys https://github.com/iamrandys рдореИрдВ рдЖрдкрд╕реЗ 100% рд╕рд╣рдордд рд╣реВрдВред рдЬреЗрд╕реНрдЯ рдФрд░
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрдорд╛рд▓ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди JSX рдХреЛ JS рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдПрдХ рдмрдбрд╝реА рдмрд╛рдзрд╛ рд╣реИред рдЕрднреА - рдЕрднреА
рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдХреИрд╕реЗ рдЧреБрд▓рдк рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реЗрдВ рд░рдЦрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░реЗрдЧрд╛ (рдиреЙрди
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-livereload рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ
рдЕрджреНрднреБрдд рд╡рд┐рдХрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдгред рдЖрдк рдХреЛрдИ рднреА рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ, рдмрдЪрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рд▓рдЧрднрдЧ
рдЕрдкрдиреЗ рд╕рднреА рдЦреБрд▓реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдФрд░ рд╕рднреА рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ рддреБрд░рдВрдд рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦреЗрдВред рдЕрднреА рдореИрдВ
рдореЗрд░реЗ рдЯреАрдбреАрдбреА рдХреЗ рд▓рд┐рдП рдмрд╕ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИред

рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣реИ, рд▓реЗрдХрд┐рди hbsfy рдХреЗ рдмрдЬрд╛рдп рд░рд┐рдПрдХреНрдЯреАрдлрд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
https://gist.github.com/benhowdle89/9533185

рд╕реЛрдо, рдЕрдЧрд╕реНрдд 11, 2014 рдХреЛ рджреЛрдкрд╣рд░ 2:35 рдмрдЬреЗ, рдЯрд╛рдЗрд░реЛрди рдЕрд╡рдиреАрдЯ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

@iamrandys https://github.com/iamrandys рдореИрдВ рдЖрдкрд╕реЗ 100% рд╕рд╣рдордд рд╣реВрдВред рдЬреЗрд╕реНрдЯ рдФрд░
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрдорд╛рд▓ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди JSX рдХреЛ JS рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдПрдХ рдмрдбрд╝реА рдмрд╛рдзрд╛ рд╣реИред рдЕрднреА - рдЕрднреА
рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдХреИрд╕реЗ рдЧреБрд▓рдк рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реЗрдВ рд░рдЦрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░реЗрдЧрд╛ (рдиреЙрди
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ред рдПрдХ рддреНрд╡рд░рд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдШрдЯрдХ-рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬреЛ рдореЛрдЪрд╛ рдФрд░ рдЪрд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдЪрдореЗрд▓реА рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рдЯреЗрд╕реНрдЯ рдмрд╣реБрдд рдЬрд▓реНрджреА рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ Livereload рдХрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдн рдорд┐рд▓рддрд╛ рд╣реИред рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред

рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрдиреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рд▓рд┐рдП рддреЗрдЬрд╝ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдЕрднреА рднреА рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╕реВрдЯ рдХреИрд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПред рдЪрдореЗрд▓реА рдореЗрдВ рдореИрдВ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдпрд╛ рд╕реВрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП "рд╡рд░реНрдгрди" рдФрд░ "рдЗрд╕реЗ" рдХреЗ рдмрдЬрд╛рдп "ddescribe" рдпрд╛ "iit" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдЬреЗрд╕реНрдЯ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рдореБрдЭреЗ рдЕрднреА рдПрдХ рддреЗрдЬрд╝ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ it.only рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЖрдк describe.only рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХрд░реНрдо рдареАрдХ рд╡рд╣реА рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рд╣реИ a
karma.conf рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдХрд░реНрдо рд╕рдорд░реНрдерд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрдВ
рдФрд░ рдмреНрд░рд╛рдЙрдЬрд░рд╛рдЗрдЬ рдХрд░реЗрдВред рдЕрдм рдЖрдк рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЕрдкрдиреЗ рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рдмрдирд╛рдпрд╛ рд╣реИред

https://github.com/iamrandys/react-component-boilerplate/tree/karma

рдмрд╕ 'рдПрдирдкреАрдПрдо рдкрд░реАрдХреНрд╖рдг' рдЪрд▓рд╛рдПрдВ рдФрд░ рдХрд░реНрдо рдЖрдкрдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВрдЧреЗ
рдкрд░рд┐рд╡рд░реНрддрдиред

рдордВрдЧрд▓рд╡рд╛рд░, 12 рдЕрдЧрд╕реНрдд 2014 рдХреЛ рд╕реБрдмрд╣ 10:35 рдмрдЬреЗ, рдЯрд╛рдЗрд░реЛрди рдЕрд╡рдиреАрдЯ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдзрдиреНрдпрд╡рд╛рдж @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 рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЬреИрд╕рд╛ рдХрд┐, рдпрд╣ рдХреЗрд╡рд▓ .jsx рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ /** @jsx рдЙрдкрд╕рд░реНрдЧ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк .js рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ JSX-рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ || рд╕реЗ рдкрд╣рд▓реЗ if-condition рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ (рддрд╛рдХрд┐ рдХреЗрд╡рд▓ 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ред рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЗрдВ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЗрд╕реЗ рдЕрднреА рднреА рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ? рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рдлрд▓рддрд╛ рдорд┐рд▓реА рд╣реИ - рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдШрдЯрдХ-рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ ред рдЯреЗрд╕реНрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЬрд▓реНрджреА рдЪрд▓рддреЗ рд╣реИрдВред

рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ред рдЗрд╕рдиреЗ рд╕рдордп рдХреЛ 9.3 рд╕реЗ рдШрдЯрд╛рдХрд░ 4.7 рдХрд░ рджрд┐рдпрд╛ред рдпрд╣ рдПрдХрд▓ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╣реИред рдореБрдЭреЗ рдЕрднреА рднреА рдХрд░реНрдо рдХреЗ рд╕рд╛рде рд░рд╣рдирд╛ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдБ рдпрд╣ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИ (100 рдкрд░реАрдХреНрд╖рдг рдПрдХ рд╕реЗрдХрдВрдб рд╕реЗ рднреА рдХрдо рд╕рдордп рд▓реЗрддреЗ рд╣реИрдВ)ред рд╕рд╛рде рд╣реА, рдЖрдкрдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдХрд░реНрдорд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рджреЗрдЦреЗрдЧрд╛ рдФрд░ рдЖрдкрдХреЗ рдХреЛрдб рдХрд╛ рдХрдИ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЬреЗрд╕реНрдЯ рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдореЙрдХрд┐рдВрдЧ рдкрд╕рдВрдж рд╣реИред рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ rewireify рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рд╕реВрд╕ рдмрдирд╛рдирд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рдо рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рд╣реИред

рд╣рд╛рдБ, рдореИрдВ рдЖрдкрдХреЛ рдЧрд▓рдд рд╕рдордЭ рд░рд╣рд╛ рд╣реВрдБ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорддрд▓рдм .jsx рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдерд╛ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ .js рдлрд╝рд╛рдЗрд▓реЗрдВ jsx рдХреЗ рд╕рд╛рде рд╣реИрдВ рдФрд░ рдкреНрд░рд╛рдЧреНрдорд╛ рд╣реЗрдбрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдореЗрд░реЗ рдЖрдИрдлреЛрди рд╕реЗ рднреЗрдЬрд╛ рдЧрдпрд╛

28 рдЕрдЧрд╕реНрдд 2014 рдХреЛ, 23:45 рдмрдЬреЗ, рдЯрд╛рдЗрд░реЛрди рдПрд╡рдиреАрдЯ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рджрд┐рд▓рдЪрд╕реНрдк рд╕реНрдирд┐рдкреЗрдЯ @sqsред рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЗрдВ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЗрд╕реЗ рдЕрднреА рднреА рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ? рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рдлрд▓рддрд╛ рдорд┐рд▓реА рд╣реИ - рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдШрдЯрдХ-рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯред рдЯреЗрд╕реНрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЬрд▓реНрджреА рдЪрд▓рддреЗ рд╣реИрдВред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВред

рдирдорд╕реНрддреЗ! рдореИрдВ рдордЬрд╛рдХ рдХреЗ рд▓рд┐рдП --watch рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдЗрд╕реЗ рддреЗрдЬреА рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЬрд▓реНрдж рд╣реА рд╡рд╛рдкрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВрдЧреЗред

рдореЗрд░реЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд░рди рдореЗрдВ рд▓рдЧрднрдЧ 5 рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВ (рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╣реИ, рдореИрдВ рдЕрднреА рд╢реБрд░реБрдЖрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ)ред рдЙрд╕рдХреЗ рдмрд╛рдж рдкреНрд░рддреНрдпреЗрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рди рдореЗрдВ рд▓рдЧрднрдЧ 1.2-1.5 рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рд╕рдордп рдХреА рдПрдХ рд╕рднреНрдп рд░рд╛рд╢рд┐ рдЬрд▓реНрджрдмрд╛рдЬреА рдХреЗ рдХреИрд╢ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рдЦрд░реНрдЪ рдХреА рдЬрд╛рддреА рд╣реИ (рдЬреЛ рдХрд┐ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 4 рдореЗрдЧрд╛ рдлрд╝рд╛рдЗрд▓ рд╣реИред

рдореИрдВ --watch рдХрд╛рдо рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рднреА рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдРрд╕рд╛ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП 1.2 рд╕реЗрдХрдВрдб рдХреЗ рд▓реЛрдб рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдореБрдЭреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЬрд▓реНрджрдмрд╛рдЬреА рдХреНрдпрд╛ рдХрд░ рд░рд╣реА рд╣реИ рдФрд░ рдордЬрд╛рдХ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдмрд╣реБрдд рдЕрдирдЬрд╛рди рд╣реВрдВред

рдХреЙрдордирдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕реНрд╡рд╛рдж рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдореЙрдбреНрдпреВрд▓ рдирд╛рдо рд╕рд╛рдкреЗрдХреНрд╖ рдХреЗ рдмрдЬрд╛рдп рд╢реАрд░реНрд╖-рд╕реНрддрд░ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореЙрдбреНрдпреВрд▓ (рдФрд░ рдирд┐рд░реНрднрд░рддрд╛) рдХреЛ рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдЕрдиреНрдпрдерд╛ рдкреНрд░рддреНрдпреЗрдХ require рдкрд░ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдкрд╛рд░ рдХрд░рдирд╛ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ рд╕рд╛рдкреЗрдХреНрд╖ рдореЙрдбреНрдпреВрд▓ рдкреНрд░рд╛рд░реВрдк (рдПрдХ рд▓рд╛ рдиреЛрдб.рдЬреЗрдПрд╕) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╣рдо рдЬрд▓реНрджрдмрд╛рдЬреА рдкрд░ рдирд┐рд╣рд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ рдЗрд╕рд╕реЗ рдЗрд╕реЗ рддреЗрдЬ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@amasad рдЬреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрдВрдЯрд░реНрди.рдЬреЗрдПрд╕ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рдпрд╣ рдХреБрдЫ рдПрдордПрд╕ рдореЗрдВ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП cmd рд▓рд╛рдЗрди рд╕реЗ рдПрдХ рдирд┐рдпрдорд┐рдд рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд╕реНрдЯ рдЗрддрдиреА рдЬрд▓реНрджреА рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ? рдФрд░ рдХреНрдпрд╛ рдЖрдкрдиреЗ рдСрдЯреЛрдореЙрдХрд┐рдВрдЧ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдЪрдореЗрд▓реА рдпрд╛ рдореЛрдЪрд╛ рдЬреИрд╕реЗ рдЕрдиреНрдп рдврд╛рдВрдЪреЗ рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдпреЛрдЧреНрдп рд╣реЛ?

рдореБрдЭреЗ beforeEach рдпрд╛ it рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рдХреА рдмрдЬрд╛рдп рд╡рд░реНрдгрди рдХреЙрд▓рдмреИрдХ рдХреЗ рддрд╣рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ 'рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛/рдПрдбреЙрдиреНрд╕' рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ) рдХреЙрд▓рдмреИрдХ рдПрдХ рдмрдбрд╝рд╛ рдЕрдВрддрд░ рдмрдирд╛рддрд╛ рд╣реИред

рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдореИрдВ рдХреЙрдлреА-рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЗрдПрд╕рдПрдХреНрд╕ рдХрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛рдо рдФрд░ рдЬреЗрд╕реНрдЯ рджреЛрдиреЛрдВ рдХреЛ рдСрдЯреЛ рдореЙрдХ 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 рд░реИрдо рдФрд░ SSD рдХреЗ рд╕рд╛рдеред рдЬреЗрд╕реНрдЯ рдЕрдкрдиреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдкрдпреЛрдЧреА рд╣реИред рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдХрд░реНрдо рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ред

рдореБрдЭреЗ рдХрд░реНрдо, рдореЛрдЪрд╛, рдЪрд╛рдИ, рд╕рд┐рдиреЙрди, рд░реАрд╡рд╛рдпрд░рд┐рдлрд╛рдИ рдФрд░ рдЕрд▓рд┐рдпрд╛рд╕рд┐рдлрд╛рдИ рдХреЗ рд╕рд╛рде рдмрдбрд╝реА рд╕рдлрд▓рддрд╛ рдорд┐рд▓реА рд╣реИред 1/2 рд╕реЗрдХрдВрдб рдореЗрдВ 300 рд╕реЗ рдЕрдзрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрджреНрднреБрдд рд╣реИ !!!!! рдЯреАрдо рдЗрд╕реЗ рдкреНрдпрд╛рд░ рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╡рд╛рдХрдИ рдЕрдЪреНрдЫреА рдЪреАрдЬреЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реА рд╣реИред рдпрд╣ рдЗрддрдирд╛ рд╕рд╛рдл рдФрд░ рд░рдЦрд░рдЦрд╛рд╡ рдпреЛрдЧреНрдп рд╣реИред рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рд╕реЗ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдЕрдВрддрд░ред

рдмрд╕ рдЦреБрдж рдЗрд╕рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред рдкрд░реАрдХреНрд╖рдг _REALLY_ рдзреАрдореЗ рдЪрд▓рддреЗ рд╣реИрдВред рдзреАрдореЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЙрдиреНрд╣реЗрдВ рдЕрдХреНрд╖рдо рдХрд░ рджреЗрддреЗ рд╣реИрдВ рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рд╕рдордп рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реА рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдпрд╣ рдХрд┐рд╕ рдХрд╛рд░рдг рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░? рдореИрдВ рдЖрдкрдХреА рдХреИрд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ?

рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рд╕рдЯреАрдХ рдореБрджреНрджрд╛ рдерд╛ - рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд╢реБрд░реВ рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ 17 рд╕реЗрдХрдВрдб рд▓рдЧреЗ, рдФрд░ рдлрд┐рд░ рдХреИрд╢рд┐рдВрдЧ рдХреЗ 4 рд╕реЗрдХрдВрдб рдмрд╛рджред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рдмрд┐рд▓реНрдб рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдФрд░ рдмрд╛рд╣рд░реА рдореЙрдбреНрдпреВрд▓ рдХреЛ рдареАрдХ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рд╕реНрд░реЛрдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП testPathDirs рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдк рд╕реЗрдЯ рдХрд░рдирд╛ рд░рдирдЯрд╛рдЗрдо рдХреЛ 0.5 рд╕реЗрдХрдВрдб рддрдХ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИред

рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯ v0.12+ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рдХрд┐рдпрд╛:

var ReactTools = require('react-tools');


module.exports = {
  process: function(src, file) {
    if(!file.match(/\.react\.js$/)) return src;

    return ReactTools.transform(src);
  }
};

рдмрд╕ рдЬреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ - рдмрд╕ рдирд┐рдпрдорд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЙрдбреНрдпреВрд▓ (рдХреЛрдИ JSX / рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ) рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдФрд░ рдЬреЗрд╕реНрдЯ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИред рдореБрдЭреЗ рдЗрдирд▓рд╛рдЗрди рдЯреЗрд╕реНрдЯ рдФрд░ рдмрд┐рд▓реНрдЯ-рдЗрди рдореЙрдХрд┐рдВрдЧ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрддрдирд╛ рдзреАрдорд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрдЭреЗ рдореЛрдЪрд╛ рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдкрд░рд╛рдзреА рдХреНрдпрд╛ рд╣реИ ... рдпрд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкреЗрдбрд╝ рдирд╣реАрдВ рдЦреЛрдЬ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдзреАрдореА рдЧрддрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрди рд░рд╣рд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВ рд╕реАрдзреЗ рдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдЕрднреА рднреА рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИред

рдХрдо рд╕реЗ рдХрдо рдзреАрдореЗрдкрди рдХреЗ рдХрд╛рд░рдг рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░? (рдореИрдВ JSX / CoffeeScript рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ; рдСрдЯреЛ-рдореЙрдХрд┐рдВрдЧ рдмрдВрдж рд╣реИ)

рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓рд╛ рддрд░реНрдХ рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИред

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 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рднреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЧреНрд░рдВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЕрднреА рднреА +20 рдХрд╛ рд╕рдордп рдорд┐рд▓ рд░рд╣рд╛ рдерд╛, рдорд┐рд▓ рдЧрдпрд╛
рдХрд░реНрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдХреБрд▓ рд╕рдордп рд▓рдЧрднрдЧ +4/5 рд╕реЗрдХрдВрдб рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рднреА рдПрдХ VM рдХреЗ рдЕрдВрджрд░

рдмрд╕ рдЗрд╕ рдкрд░ рд╡рд╛рдкрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд╣рдо рдХрд░реНрдорд╛/рдореЛрдЪрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╣рдо 700 рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдХрд░реАрдм рд╣реИрдВ рдФрд░ рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ 4 рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдореЙрдХ рдХрд╛ рдкреНрд░рдмрдВрдз рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрджреНрднреБрдд рд░рд╣реА рд╣реИред рдирд┐рд░реНрджреЛрд╖ рдФрд░ рддрд╛рдЬрд╝рд╛ рд░реВрдк рд╕реЗ рд╕реНрдерд┐рд░ред рдЦреЗрд▓ рдкрд░рд┐рд╡рд░реНрддрдХ! рд╣рдорд╛рд░реА рдЯреАрдо рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдореЗрдЬрд┐рдВрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХреАред

рдореБрдЭреЗ рдХрднреА рднреА рдЬреЗрд╕реНрдЯ рддреЗрдЬ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдореИрдВ рдореЛрдЪрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдЕрдЧрд░ рдЬреЗрд╕реНрдЯ рддреЗрдЬ рдерд╛, рддреЛ I
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛ред

рдЧреБрд░реБ, 5 рдлрд░рд╡рд░реА, 2015 рдХреЛ рджреЛрдкрд╣рд░ 12:17 рдмрдЬреЗ, рдЧрд┐рд▓ рдмреАрд░рдореИрди рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

@iamrandys https://github.com/iamrandys рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдореЗрдВ рд╕рдордЭрд╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ?
рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдПрдВ рдХрд┐ рдЖрдкрдиреЗ рдЗрддрдиреА рддреЗрдЬреА рд╕реЗ рдордЬрд╛рдХ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛?

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/facebook/jest/issues/116#issuecomment -73097182ред

рдзрдиреНрдпрд╡рд╛рдж @iamrandys рдореИрдВрдиреЗ рдЕрдкрдирд╛ "рддреЗрдЬрд╝ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрд╝рд╛рдХ рдХреИрд╕реЗ рдХрд┐рдпрд╛?" рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ рдореИрдВрдиреЗ рдЖрдкрдХреА рдкреЛрд╕реНрдЯ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкрдврд╝рд╛ рдерд╛ (рд▓реЗрдХрд┐рди рдЖрдкрдиреЗ рдЙрд╕реА рд╕рдордп рдЬрд╡рд╛рдм рджрд┐рдпрд╛) ... рд╡реИрд╕реЗ рднреА, рдпрд╣ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЗрд╕реНрдЯ рдХреЛ рдЕрднреА рднреА рдЙрддреНрдкрд╛рджрди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

@haihappen рдФрд░ @darcyadams рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдХрд╛рдордХрд╛рдЬ /рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдиреЗ рдореБрдЭреЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд╕рдордп рдХреЛ 3,5 рд╕реЗрдХрдВрдб рд╕реЗ рд▓рдЧрднрдЧ 1 рд╕реЗрдХрдВрдб рддрдХ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреАред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕рдордп рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ, рдЬреЛ рд▓рдЧрднрдЧ 1 рд╕реЗрдХрдВрдб рднреА рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рджреИрдирд┐рдХ рдХрд╛рд░реНрдп рдореЗрдВ рдХреБрд╢рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдзреАрдорд╛ рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдореЛрдЪрд╛/рдХрд░реНрдо рдХреЙрдореНрдмреЛ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдЧрд╛ред рдореБрдЭреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╣рд░ рдЪреАрдЬ рдХрд╛ рдордЬрд╛рдХ рдЙрдбрд╝рд╛рдиреЗ рдХрд╛ рдЬреЗрд╕реНрдЯ рдХрд╛ рджрд░реНрд╢рди рдкрд╕рдВрдж рд╣реИ, рд▓реЗрдХрд┐рди рд▓рд╛рдн рд╕рд┐рд░реНрдл рдПрдЯреАрдПрдо рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдореБрдЭреЗ рдПрдХ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕рд┐рд░реНрдл 3 рдкрд░реАрдХреНрд╖рдг рдорд┐рд▓реЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ 3 рд╕реЗрдХрдВрдб рдХрд╛ рд╕рдордп рд▓рдЧрд╛ред

рдХреНрдпрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд░реЛрдбрдореИрдк рдкрд░ рдХрд╣реАрдВ рднреА рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛ рд░рд╣рд╛ рд╣реИ?

рдмреАрдЯреАрдбрдмреНрд▓реВ: рдореБрдЭреЗ рдХреЗрд╡рд▓ рдмрджрд▓реА рдЧрдИ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ (рд╕реБрдВрджрд░ рд╣реИрдХрд┐рд╢) рддрд░реАрдХрд╛ рдорд┐рд▓рд╛ред рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдмрд╣реБрдд рддреЗрдЬрд╝ рдмрдирд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдорддреМрд░ рдкрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдкрд░реАрдХреНрд╖рдг рд╣реЛрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рдпрд╣рд╛рдВ рд░рдЦрд╛ рд╣реИ: https://gist.github.com/mik01aj/fefb7718331e5454b9d1

React.js 2015 рдХреЙрдиреНрдлрд┐рдбреЗрдВрд╕ рдореЗрдВ рд╕реНрдЯреНрд░реЗрдВрдЬ рдЬреЗрд╕реНрдЯ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

testPathDirs рдЕрдкрд░рд╛рдзреА рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред package.json рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:

  "jest": {
    "unmockedModulePathPatterns": [
      "./node_modules"
    ],
    "scriptPreprocessor": "./preprocessor.js",
    "testDirectoryName": "tests",
    "testPathDirs": ["tests"]
  }

@adjavaherian рдЗрд╕рд╕реЗ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ рдпрджрд┐ рдЖрдк рд╕реНрд╡рдЪрд╛рд▓рд┐рдд https://github.com/facebook/jest/issues/176

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рдЖрдкрдХреЗ testPathDirs рдЖрдкрдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдСрдЯреЛ-рдореЙрдХрд┐рдВрдЧ рдХреЗ рд╕реВрдХреНрд╖реНрдо рдФрд░ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рддрд░реАрдХреЛрдВ рд╕реЗ рдЯреВрдЯрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдВред

рдЗрди рдЪрд┐рдВрддрд╛рдУрдВ рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рд╕реЗрдЯ-рдЕрдк рдореЗрдВ рдХреБрдЫ рдЧрд▓рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рдпрд╣рд╛рдВ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рд╣рдо рд╕рднреА рд╕рд╛рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреИрд╕реЗ: var component = React.createFactory(require("component/path")) рд╕рд╛рде рдореЗрдВ рдЕрдиреНрдп рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рднреАрддрд░ред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рдХрд╛рд░рдЦрд╛рдиреЗ рдХреЛ рд╣рд░ рдмрд╛рд░ рдПрдХ рдирдпрд╛ рдШрдЯрдХ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдореИрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкрд╣рд▓реЗ рдХреЗ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реВрдВ рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдкрд░реАрдХреНрд╖рдг рдЧрддрд┐ 10x рдмрдврд╝ рдЬрд╛рддреА рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпреЛрдВред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдорджрдж рдХрд░рддрд╛ рд╣реИред рд╡рд┐рдЪрд╛рд░?

рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕рдордп рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдП рдЧрдП рдкрд░реАрдХреНрд╖рдг рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рд╕реЗ рдмрд╛рд╣рд░ рд░рд╣ рдЧрдпрд╛ рд╣реЛред рд▓рд╛рд▓ рд░рдВрдЧ рдХреЛ рджреЗрдЦрдирд╛ рдЕрдиреБрдЪрд┐рдд рд╣реИ рдЬрдм рдЙрд╕ рдХрд╛рдо рдХрд╛ рдмрдбрд╝рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХрджрдо рд╕реЗ рдЖрддрд╛ рд╣реИред

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ,

рдореБрдЭреЗ рднреА рдпрд╣реА рддрдХрд▓реАрдлрд╝ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рднреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ 1 рдорд┐рдирдЯ рд▓рдЧрддреЗ рд╣реИрдВ :(

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдореБрджреНрджреЗ рдХреЛ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ, рдХреЛрдИ рд╕рдВрдХреЗрдд?


рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ

рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдореЗрд░реЗ VM рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ (cf: http://stackoverflow.com/a/13703132)ред рдЕрдм рдкрд░реАрдХреНрд╖рдг рдЕрднреА рднреА рдореЗрд░реА рдЕрдкреЗрдХреНрд╖рд╛ рд╕реЗ рдзреАрдореЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдпреЛрдирд┐ рдлрд┐рдХреНрд╕ (рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдХреЗ рд▓рд┐рдП 60 рд╕реЗрдХрдВрдб -> 6 рд╕реЗрдХрдВрдб) рд╕реЗ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬрд╝ рд╣реИрдВред

рдЕрдЧрд░ рдЧрддрд┐ рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реИ, рддреЛ рдореИрдВ рдореЛрдЪрд╛ рдЬрд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред рд╣рдореЗрдВ рдЗрд╕ рдХрд╛рдВрдЯреЗ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рдлрд▓рддрд╛ рдорд┐рд▓реА рд╣реИ, рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рд░рд▓ рд╕реЗ рдЬрдЯрд┐рд▓ рд░рд┐рдПрдХреНрдЯ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВред https://github.com/adjavaherian/mocha-react рд╣рдо рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд▓рдЧрднрдЧ 3 рд╕реЗрдХрдВрдб рдореЗрдВ 100 рд╕реЗ рдЕрдзрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдореЛрдЪрд╛ рдЬрд╛рдиреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рд╣реИред рд▓рдЧрднрдЧ 900 рдкрд░реАрдХреНрд╖рдг рддрдХ рдФрд░ рдЗрд╕рдореЗрдВ рд▓рдЧрднрдЧ 4 рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВред

23 рдЕрдкреНрд░реИрд▓ 2015 рдХреЛ рд╢рд╛рдо 4:53 рдмрдЬреЗ, рдЕрдореАрд░ рдЬрд╛рд╡рд╛рд╣реЗрд░рд┐рдпрди рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдЕрдЧрд░ рдЧрддрд┐ рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реИ, рддреЛ рдореИрдВ рдореЛрдЪрд╛ рдЬрд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред рд╣рдореЗрдВ рдЗрд╕ рдХрд╛рдВрдЯреЗ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рдлрд▓рддрд╛ рдорд┐рд▓реА рд╣реИ, рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рд░рд▓ рд╕реЗ рдЬрдЯрд┐рд▓ рд░рд┐рдПрдХреНрдЯ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВред https://github.com/adjavaherian/mocha-react рд╣рдо рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд▓рдЧрднрдЧ 3 рд╕реЗрдХрдВрдб рдореЗрдВ 100 рд╕реЗ рдЕрдзрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВред

рд╡рд╣реА рдЕрдиреБрднрд╡, рдореИрдВрдиреЗ рдЬреЗрд╕реНрдЯ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдкрд░реАрдХреНрд╖рдг (рдЬреЗрдПрд╕рдПрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд▓рдЧрднрдЧ 3 рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВ, рдпрд╣ рдмрд╣реБрдд рдХреБрдЫ рд╣реИред

@iamrandys рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╕реЗрдЯрдЕрдк рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдиреЗ рдореЗрдВ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рд╣реИ? рдПрдХрджрдо рд╕рд╣реА рдХреЙрдореНрдмреЛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

@amasad рдХреНрдпрд╛ рдЬреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХреИрд╢ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬреЛ рдмреИрдмреЗрд▓-рд▓реЛрдбрд░ рдХреИрд╢рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ? - https://github.com/babel/babel-loader#options

рдЬреЛ рдЪреАрдЬ рдореЗрд░реЗ рд▓рд┐рдП рдордЬрд╛рдХ рдХреЛ рдзреАрдорд╛ рдХрд░рддреА рд╣реИ рд╡рд╣ рд╕рдВрдХрд▓рди рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреВрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╣реИред рдореЗрд░реЗ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЛ рдЫреЛрдбрд╝рдХрд░ 0.05 рд╕реЗрдХрдВрдб рд╕реЗ рдХрдо рд╕рдордп рдореЗрдВ рдкрд╛рд╕ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд▓рдЧрднрдЧ 4 рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВред
https://github.com/jeffmo/node-worker-pool
https://github.com/facebook/jest/blob/master/src/TestRunner.js#L376

@songawee рдпрд╣ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрдЖрд░ рдирд╣реАрдВ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ? рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЪрд╛рд▓реВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдХрднреА-рдХрднреА рдпрд╣ рдЬрд╛рдирдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреИрд╢ рдХреЛ рдХрдм рддреЛрдбрд╝рдирд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдХрдВрдкрд╛рдЗрд▓рд░ рд╡рд┐рдХрд▓реНрдк рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдХреИрд╢реЗ рд░реАрд╕реЗрдЯ рд╣реЛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдХреИрд╢рд┐рдВрдЧ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рд░реАрд╕реЗрдЯ-рдХреИрд╢ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдирд╛ рд╣реИред

@doodzik рдХреНрдпрд╛ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд░реНрдХрд░-рдкреВрд▓ рд╣реИ, рди рдХрд┐ node-haste рдореЙрдбреНрдпреВрд▓реНрд╕ рдХреЛ

@amasad рдореИрдВрдиреЗ рдЬреЛ рдХрд┐рдпрд╛ рд╡рд╣ jest рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛ред
рдФрд░ node-worker-pool рдЖрдЦрд┐рд░реА рдЙрджрд╛рд╣рд░рдг рдерд╛ рдЬрд╣рд╛рдВ рдкрд░реАрдХреНрд╖рдг рдзреАрдореЗ рдереЗред
рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдирд┐рд╖реНрдХрд░реНрд╖ рд╕рд┐рд░реНрдл рд▓рдХреНрд╖рдг рд╣реИрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреА рдЬрдбрд╝ рдирд╣реАрдВ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕рдХрд╛ рдЙрдЪрд┐рдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рдерд╛ред

рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ:
screen shot 2015-06-03 at 00 10 16

рдореЗрд░реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд░реАрдХреНрд╖рдг рдзреАрдореЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╡рд╛рд▓реЗ)ред рдореИрдВ рдЬрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдЧреИрд░-рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВред

+1

рдореЗрд░рд╛ рднреА рдпрд╣реА рд╡рд┐рдЪрд╛рд░ рд╣реИред рдЯреЗрд╕реНрдЯ рдмрд╣реБрдд рдзреАрдореЗ рд╣реЛрддреЗ рд╣реИрдВ :рдирд┐рд░рд╛рд╢:

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдореИрдВ рд╣реА рдерд╛ рдЬрд┐рд╕рдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ред рдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓реА рдмрд╛рд░ рдЬреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рддреЗрдЬреА рд╕реЗ рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдлреЗрд╕рдмреБрдХ рдЬреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ?

рд░рд┐рдПрдХреНрдЯ рдпреВрд░реЛрдк рд╕рдореНрдореЗрд▓рди рдкреНрд░рд╢реНрдиреЛрддреНрддрд░ рд╕рддреНрд░ рдореЗрдВ рд░рд┐рдПрдХреНрдЯ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЗрд╕реНрдЯ рд╕реБрдзрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░рд╛ рдкреНрд░рд╢реНрди - https://youtu.be/CRJZBZ_-6hQ?t=363

рдореЛрдЪрд╛ + рд╕рд┐рдиреЙрди рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдХрднреА рдЦреБрд╢ рдирд╣реАрдВ рд░рд╣рд╛ред

31 рдЕрдЧрд╕реНрдд 2015 рдХреЛ 17:45 рдмрдЬреЗ рдПрд▓рди рд░реБрдмрд┐рди рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рд░рд┐рдПрдХреНрдЯ рдпреВрд░реЛрдк рд╕рдореНрдореЗрд▓рди рдкреНрд░рд╢реНрдиреЛрддреНрддрд░ рдореЗрдВ рдЬреЗрд╕реНрдЯ рдЯреВ рд░рд┐рдПрдХреНрдЯ рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░рд╛ рдкреНрд░рд╢реНрди
рд╕рддреНрд░ - https://youtu.be/CRJZBZ_-6hQ?t=363

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/facebook/jest/issues/116#issuecomment -136394910ред

рдореЗрд░реА рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЬреЗрд╕реНрдЯ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдордп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЪрд▓рд╛рдирд╛ рд╣реИ рдпрд╛ рд╕рд┐рд░реНрдл рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ (--runInBand) рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрд╕рд╛рдзрди рд╡рд┐рд╡рд╛рдж рдирд╣реАрдВ рд╣реИред

рдореИрдВрдиреЗ v8 рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ (https://github.com/node-inspector/v8-profiler) рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕реАрдкреАрдпреВ рдбрдВрдк рдмрдирд╛рдП рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп рдореЙрдХрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИред рдпрд╛рдиреА рдореЗрд░реЗ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХрд╛ 25% jest-cli/src/lib/utils.js#runContentWithLocalBindings рдореЗрдВ рд╡реНрдпрддреАрдд рд╣реЛрддрд╛ рд╣реИред

рдХреЛрдИ рдкреНрд░рджрд░реНрд╢рди рдЕрджреНрдпрддрди? рдмрд╕ es6 рдФрд░ рдмреЗрдмреЗрд▓-рдЬреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдЬреЗрд╕реНрдЯ рдЙрдард╛рдпрд╛, рд▓реЗрдХрд┐рди> 10 рд╕реЗрдХрдВрдб рдореЗрдВ 2 рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг рдЪрд▓ рд░рд╣рд╛ рд╣реИ :-(
рдЗрд╕ рдзрд╛рдЧреЗ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ ...

рд╣рдо рдЬрд▓реНрдж рд╣реА рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВрдЧреЗред рд╣рдо рдЕрднреА рдЬрд╕реНрдЯ рдкрд░ рдХрд╛рдо рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдбреВрдмреЗ рд╣реБрдП рд╣реИрдВ рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╢рд╛рдирджрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИрдВред

рдХреНрдпрд╛ рдРрд╕реЗ рдХреЛрдИ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд╕рдореБрджрд╛рдп рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

+1

рдЕрднреА рд╕рдмрд╕реЗ рдмрдбрд╝реА рдорджрдж рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг, рд╡реЗрдмрд╕рд╛рдЗрдЯ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рдФрд░ рдореБрджреНрджреЛрдВ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдУрдкрди рд╕реЛрд░реНрд╕ рдореЗрдВ рдорджрдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдмрд┐рд▓реНрдб рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдЕрдкрдиреЗ рдЬреЗрд╕реНрдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рдЬреЛ рдПрдХ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рд╡рд╣ рдпрд╣ рдерд╛ рдХрд┐ рд╣рдо рдЕрдкрдиреА рд╕рд┐рдВрдЧрд▓ рдХреЛрд░ рдорд╢реАрди рдХреЛ рдорд▓реНрдЯреА рдХреЛрд░ рдорд╢реАрди рд╕реЗ рдмрджрд▓ рджреЗрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЬреЗрд╕реНрдЯ рдЙрддрдиреЗ рд╣реА рд╢реНрд░рдорд┐рдХ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рддрдиреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдереНрд░реЗрдб рдЙрдкрд▓рдмреНрдз рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ рддреЛ рдЖрдк рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ '-w' (maxWorkers) рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рд╕рд┐рдВрдЧрд▓ рдХреЛрд░ рдкрд░ рднреА рд╕реНрдкреАрдбрдЕрдк рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдВрддрддрдГ рд╣рдордиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдореЙрдХрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реИ (рдКрдкрд░ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВ) рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред

рдореЗрд░реЗ рд▓рд┐рдП es6 рдХреЗ рд╕рд╛рде рдЬреЗрд╕реНрдЯ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдкрдпреЛрдЧреА рд╣реИред рдЗрд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдореЗрдВ рдмрд╕ 10+ рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕ рд╕рдордп рдореЗрд░реЗ рдкрд╛рд╕ рдореМрдЬреВрдж рдПрдХрд▓ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рдореЗрдВ 2s рд▓рдЧрддреЗ рд╣реИрдВред рдореИрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛, рдХрд░реНрдо рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛ :(

рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдиреЛрдб-рдЬрд▓реНрджреА рдХреЛ рдПрдХ рдирдП рдореЙрдбреНрдпреВрд▓ рд░рд┐рдЬрд╝реЙрд▓реНрд╡рд░ рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдирдорд╕реНрддреЗред рдХреНрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЦрдмрд░ рд╣реИ?

рдирдорд╕реНрддреЗ, рдХреНрдпрд╛ рдЬреЗрд╕реНрдЯ рдЧреИрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ? рд╣рдорд╛рд░реА рдЯреАрдо рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдЧреИрд░-рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЛрдиреЛрдВ рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдХ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЬреЗрд╕реНрдЯ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдкрд░реАрдХреНрд╖рдг-рдзрд╛рд╡рдХ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд░рд┐рдПрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред :) рдмрд╕ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ!

рд╣рд╛рдп рд╕рдм, рдпрд╣рд╛рдБ рдкрд░ рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реЛрдЪрдХ рдЬрд╛рдирдХрд╛рд░реАред рдореИрдВ рднреА рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдЪрд▓ рд░рд╣реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ 13 рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЪрд▓рд╛рдиреЗ рдореЗрдВ ~15 рд╕реЗрдХреЗрдВрдб рдХрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ "testPathDirs": ["<rootDir>/path/to/tests/"] рдХреЛ рд╣рдорд╛рд░реЗ package.json рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕рдордп рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рд╣реБрдЖ рд╣реИред

@cpojer рдХреНрдпрд╛ рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдирдП рдФрд░ рдмреЗрд╣рддрд░ рдореЙрдбреНрдпреВрд▓ рд░рд┐рдЬрд╝реЙрд▓реНрд╡рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рдорд┐рд▓рд╛ рд╣реИ? рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреА рдХреБрдВрдЬреА рд╣реЛрдЧреА

рдпрд╣ рдХрд╛рд░реНрдп #599 рдореЗрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж @cpojer
рдореИрдВ рд╕рдорд╛рдкреНрдд рдЬрд▓реНрджрдмрд╛рдЬреА 2 рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдВ

рдореЗрд░реЗ рд▓рд┐рдП 44ms рдореЗрдВ рдореЛрдЪрд╛ рд░рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╡рд╣реА рдкрд░реАрдХреНрд╖рдг рдЬрд╣рд╛рдВ рдЬреЗрд╕реНрдЯ рдиреЗ рдкреВрд░реЗ 6 рд╕реЗрдХрдВрдб рдХрд╛ рд╕рдордп рд▓рд┐рдпрд╛ред

jest рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Mocha , jsdom рдФрд░ sinon рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ 6 рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрднрдЧ 15 рдорд┐рдирдЯ рдХрд╛ рд╕рдордп рд▓рдЧрд╛ред

рд╕рднреА рдХреЛ рдЦреБрд╢рдЦрдмрд░реА, рдореИрдВ рдЖрдЬ #599 рдХрд╛ рд╡рд┐рд▓рдп рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдзреАрдореЗ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреЛ рдЦрддреНрдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЖрдЦрд┐рд░рдХрд╛рд░ред

рдареАрдХ рд╣реИ, рдЗрд╕реЗ рдЕрдВрддрддрдГ рдЬреЗрд╕реНрдЯ 0.9 рдореЗрдВ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рдЗрддрдирд╛ рд╕рдордп рд▓рдЧрд╛ рд▓реЗрдХрд┐рди рдЬреЗрд╕реНрдЯ рдореЗрдВ рдХреБрдЫ рдорд╕рдЦрд░рд╛рдкрди рдерд╛ :)

рджреЗрдЦреЗрдВ https://github.com/facebook/react/pull/6052 рдХрд┐ рдХреИрд╕реЗ рд░рд┐рдПрдХреНрдЯ рдЯреЗрд╕реНрдЯ рдЦреБрдж рдХреЛ рддреЗрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдпрджрд┐ рдЖрдк рдЗрд╕ рд╕реБрдзрд╛рд░ рдХреЛ рдЖрдЬрдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ #599 рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рджреЗрдЦреЗрдВред рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ jest-cli@next рд░реВрдк рдореЗрдВ рдЯреИрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдмрдЧ рд╣реИ рдЬреЛ рд▓реЛрдЧреЛрдВ рдХреЛ рдУрдкрди рд╕реЛрд░реНрд╕ рдореЗрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдВрдж рдХрд░ рджреВрдВрдЧрд╛ред

npm install jest-cli@next рдпрджрд┐ рдЖрдк рдЗрд╕ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ( jest@next @cpojer рдХреЗ рдмрдЬрд╛рдп)

рдУрд╣ рд╣рд╛рдБ, рдореИрдВ рд╣рдореЗрд╢рд╛ рдпрд╣ рдЧрд▓рддреА рдХрд░рддрд╛ рд╣реВрдБ :) рдореИрдВрдиреЗ рдЕрдкрдиреА рдореВрд▓ рдЯрд┐рдкреНрдкрдгреА рд╕рдВрдкрд╛рджрд┐рдд рдХреАред

@cpojer npm install jest-cli@next рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ dontMock рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЖ рд░рд╣реА рд╣реИрдВред рдЬрд┐рд╕рд╕реЗ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдЕрджреНрдпрддрди рд╕реЗ рдкрд╣рд▓реЗ ([email protected] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдпрд╣ рд▓рд╛рдЗрди рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ:

jest.dontMock('../../../../fixtures');

рдлрд┐рд░ 0.9.0 рдХреЗ рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рдж, рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЙрд╕реА рдХреЙрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдордЬрд╛рдХ рдЙрдбрд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

@steinbachr рдЬреЛ рд╢рд╛рдпрдж рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджреЗ рдореЗрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдПрдХ рд░реЗрдкреЛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдПрдлрдмреА рдкрд░ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ!

рдзрдиреНрдпрд╡рд╛рдж @cpojer , рдпрд╣рд╛рдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдореБрджреНрджрд╛

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

StephanBijzitter picture StephanBijzitter  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

withinboredom picture withinboredom  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Secretmapper picture Secretmapper  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kgowru picture kgowru  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ticky picture ticky  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ