рдШрдЯрдХ рдиреЛрдЯреЛрдВ рдХреЗ рдКрдкрд░рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдоред v1
рдШрдЯрдХреЛрдВ рдХреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдирд┐рдпрдорд┐рдд
node.js
рдореЙрдбреНрдпреВрд▓ рдХреА рддрд░рд╣ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЛрдо рд╕реЗ рдмрдВрдзрд╛ рд╣реБрдЖред рдпрд╣реА рд╣реИ, рдпрджрд┐ рдореИрдВ рдХрдВрд╕реЛрд▓ рдХреЗ рдХрд┐рд╕реА рдШрдЯрдХ рдХреЛ рдЪрд▓рд╛рдХрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдиреЛрдб
node mocha ...
рдХрд╣реЛ
node mocha ...
, рдореБрдЭреЗ рдХреЗрд╡рд▓ рдПрдХ рдЕрдиреНрдп рдШрдЯрдХ рдХреА
require
рдирд╣реАрдВ рд╣реИ рдЬреЛ DOM рд╕реЗ рдмрдВрдзрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ,
require
рдХрдВрд╕реЛрд▓ рдиреЛрдб рдХреЛ рд▓реЗ рдЬрд╛рдПрдЧрд╛ред рдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓, рдШрдЯрдХ рдирд╣реАрдВред рдФрд░ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ node.js рдХрд╛ рдкреНрд░рднреБрддреНрд╡ рд╣реИ рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реИред рдШрдЯрдХ рдмрд┐рд▓реНрдбрд░ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рдЬрд╛рдПрдЧреАред
Https://github.com/component/component/issues/41 рджреЗрдЦреЗрдВред рдЕрдм рддрдХ, рдЖрдк рдЗрди рдШрдЯрдХреЛрдВ рдХреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдЖрдкрдХреЛ (рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдШрдЯрдХ рдирд┐рдХрд╛рдп рдореЗрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП) рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (
component/router
рджреЗрдЦреЗрдВ):
try { var Route = require('route-component'); } catch (err) { var Route = require('route'); }
рдореИрдВ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рд╣рдо v1 рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдкрд░ рдШрдЯрдХреЛрдВ рдХреЗ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ, рдлрд┐рд░ рдореИрдВ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ред Js-Applications рдХреЗ рдПрдХреАрдХреГрдд рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреВрдВрдЧрд╛ред
рд╕рдорд╛рдирд╛рдВрддрд░ рдиреЛрдб рдореЙрдбреНрдпреВрд▓ рд╕реЗ рд╕рд░рд▓ рдШрдЯрдХреЛрдВ рдореЗрдВ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рдЖрд╡рд░рдг рдХреЗ рдЕрд▓рд╛рд╡рд╛), рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
component/indexof
,
component/each
, рдЕрднреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХрдВрд╕реЛрд▓ рдореЗрдВ рдореЛрдЪрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб
https://github.com/mbykov/component-testing-example рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред рдХреНрд▓реЛрди рдФрд░ рдЗрд╕реЗ рджреЗрдЦреЗрдВред
рдЗрдХрд╛рдИ рдмрдирд╛рдо рдПрдХреАрдХреГрдд рдкрд░реАрдХреНрд╖рдг
рдЕрднрд┐рдиреНрди рдкрд░реАрдХреНрд╖рдг рдХреНрдпрд╛ рд╣реИ рд╕реНрдкрд╖реНрдЯ рд╣реИ - рд╣рдо рдЖрд╡реЗрджрди рдХрд╛ рдореБрдХрд╛рдмрд▓рд╛ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реА рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдпрджрд┐ рд╣рдо рд╕реНрдЯрдмреНрд╕ рдФрд░ рдореЛрдЬрд╝реЗрдХ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реИрдВ)ред рд╣рдо рдХрдХрдбрд╝реА, рд╕реЗрд▓реЗрдирд┐рдпрдо, рдХреИрдкрд┐рдмрд╛рд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЖрд╡реЗрджрди рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкреЗрдХреНрд╖рд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреА рд╣реИред рдПрдХ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдПрдХ рдШрдЯрдХ рдореЗрдВ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╣реИред
рдХреЗрд╡рд▓ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдХреБрдЫ рдФрд░ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдмреБрд░рд╛ рд╣реИред рдРрд╕реА рд╣реИ рджреЗрд╕реА рдкрд░рд┐рднрд╛рд╖рд╛ред рдШрдЯрдХ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЙрдирдХреЗ рдкрд╛рд╕ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рдмрд╛рд╣рд░ рд╕реЗ рд╕реБрд▓рдн рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рд╡реЗ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред рдФрд░ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рддрд░реАрдХреЗ рдЬреЛ рд╣рдо рдХрд╣реАрдВ рд╕реЗ рднреА рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдлреА рд╕рдХреНрд╖рдо рд╣реИрдВред
test / test.js
рдЪрд▓реЛ рдХрдВрд╕реЛрд▓ рдЯреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдШрдЯрдХ рдмрдирд╛рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдЕрдЧрд▓реЗ рдкрддреНрд░ рдХреЛ рдЬрд╛рдирдиреЗ, рдХрд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рднреВрд▓ рдЧрдП рд╣реИрдВ рдХрд┐ рдмрд╛рдж рдореЗрдВ рдХреНрдпрд╛ рд╣реИ -
рдпрд╛
ред рдпрд╛, рдХрд╣рддреЗ рд╣реИрдВ,
╬╛
-
╬╛
рдпрд╛
╬╗
? (рдпрд╣ "рдЦрд┐рд▓реМрдирд╛" рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рдЙрдЪреНрдЪрд╛рд░рдг рдХреЗ рдмрд┐рдирд╛ рд╡рд░реНрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ)ред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдШрдЯрдХ рдореЗрдВ рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ, рдПрдХ рд╡рд░реНрдг рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдПрдХ рд╢рдмреНрдж рдХреЗ рд▓рд┐рдП рд╢рдмреНрджред рдЗрд╕рдореЗрдВ рд╣рдо рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдШрдЯрдХ
component/map
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдШрдЯрдХ рдХреЗрд╡рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
var map = require('map-component'); module.exports = nextSym; function nextSym() { if (!(this instanceof nextSym)) return new nextSym(); return this; }
рдФрд░ рджреЛ рддрд░реАрдХреЗ
nextSym.prototype.sym = function(sym){ return String.fromCharCode(sym.charCodeAt(0)+1); } nextSym.prototype.word = function(word){ var self = this; var arr = word.split(''); var res = map(arr, function(sym) { return self.sym(sym); }) return res.join(''); }
рд▓рд╛рдЗрди рдпрджрд┐ ((рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдЙрджрд╛рд╣рд░рдг)) рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рд▓реМрдЯрд╛рдПрдВ () рдПрдХ рдЬрд╛рджреВ рдХрд╛ рдЬрд╛рджреВ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдШрдЯрдХ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рд╣рдореЗрдВ рдирдП рдСрдкрд░реЗрдЯрд░ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред
$ make
package.json, рдореЛрдЪрд╛ рдФрд░ рдЪрд╛рд╣рд┐рдП
рд╣рдо рдПрдХ рд╣реА рд▓реЗрдЦрдХ,
TJ Holowaychuk рдФрд░
рдЪрд╛рд╣рд┐рдП рджрд╛рд╡рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреНрд╡рд╛рд░рд╛ рдореЛрдЪрд╛ рдврд╛рдВрдЪреЗ (рдореЛрдЪрд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдЕрдм рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдШрдЯрдХ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдиреЛрдб.рдЬреЗрдПрд╕, рддреЛ рдЪрд▓рд┐рдП рдПрдХ
package.json
рдмрдирд╛рддреЗ рд╣реИрдВред рдЬреЗрд╕рди рдлрд╝рд╛рдЗрд▓
$ npm init
package.json
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣рдо рдЙрди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
"version": "0.0.1", "dependencies": { "map-component": "*" }, "devDependencies": { "mocha": "*", "should": "*" },
рдорд╛рдирдЪрд┐рддреНрд░-рдШрдЯрдХ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдореЛрдЪрд╛ рдФрд░ рдЪрд╛рд╣рд┐рдПред
$ npm install
makefile рдФрд░ test.js
рдореЗрдХрдлрд╛рдЗрд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╣рд╛рде рд╕реЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдХреЙрд▓ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░реАрдХреНрд╖рдг рдЖрдЗрдЯрдо рд▓рд┐рдЦреЗрдВ;
test: @./node_modules/.bin/mocha \ --require should \ --reporter spec
рдкрд░реАрдХреНрд╖рдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЦреЛрдЬ рджреНрд╡рд╛рд░рд╛ рдореЛрдЪрд╛ред рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкрд░реАрдХреНрд╖рдг рдмрдирд╛рдПрдБред js
var nextSym = require('..')(); describe('component console example', function(){ describe('symbol', function() { it(' before ', function() { var next = nextSym.sym(''); next.should.be.equal(''); }) }) describe('word', function() { it('shifted qwerty is rxfsuz', function() { var shifted= nextSym.word('qwerty'); shifted.should.be.equal('rxfsuz'); }) }) })
рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВ
component console example symbol тЬУ before word тЬУ shifted qwerty is rxfsuz 2 passing (19ms)
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдШрдЯрдХреЛрдВ рдХреЛ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдПрдХ рдЕрдкрд╡рд╛рдж рд╣реЛрдиреЗ рдХреА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдкрд░реАрдХреНрд╖рдг рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдЧреЗ рджреЗрдЦреЗрдВ рдордВрдЪред
рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛рдП