Sinon: рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдПрдХреНрдорд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕реНрдЯрдмрд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдиреЛрдб рдХреЛ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рдЬреВрди 2018  ┬╖  17рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: sinonjs/sinon

рдПрдХреНрдорд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЙрдбреНрдпреВрд▓ рдЬреЛ рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВ (рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдмреИрдмреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ES5 рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдФрд░ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ default рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ ES рдирд╛рдорд╕реНрдерд╛рди рдкреНрд░рддрд┐ рдХрд▓реНрдкрдирд╛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВред рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд┐рдиреЙрди рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдк рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВ: 'ES Modules cannot be stubbed' ред

рд▓реЗрдХрд┐рди @jdalton рдиреЗ рдиреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд░рдирдЯрд╛рдЗрдо рд▓реЛрдбрд░ esm рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдПрдХреНрдорд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЙрдбреНрдпреВрд▓ ( *.mjs ) рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рд┐рдиреЙрди рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдЯрдмрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕рдиреЗ mutableNamespace рдЬреЛрдбрд╝рд╛ esm ред

рд╣рдорд╛рд░реЗ рд╣рд╛рдЙ рдЯреВ рд╕реЗрдХреНрд╢рди рдХреЗ рддрд╣рдд рдПрдХ рд▓реЗрдЦ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде esm рдФрд░ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдиреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП npm рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╕рдиреНрджрд░реНрдн:

Documentation ES2015+ Help wanted good first issue hacktoberfest pinned

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

@giltayar ESM рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдзрд╛рдИ! рдмрдврд╝рд┐рдпрд╛ рд▓реЗрдЦ, рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВред рд╣рдордиреЗ рд╣рдореЗрд╢рд╛ рдХрд╣рд╛ рд╣реИ рдХрд┐ рдИрдПрд╕рдПрдо рд░рдирдЯрд╛рдЗрдо рдХреЗ рдЕрдиреБрд░реВрдк рдИрдПрд╕ рдореЙрдбреНрдпреВрд▓ рд╕реНрдЯрдмрд┐рдВрдЧ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдпрд╣ рднреА рдХрд╣рд╛ рд╣реИ (рдКрдкрд░ рдХреА рддрд░рд╣) рдХрд┐ рдЗрд╕реЗ рдкреНрд░реЙрдХреНрд╕реАрдХреНрд╡рд╛рдпрд░, рд░реАрд╡рд╛рдпрд░, рдпрд╛ ... рдХреНрд╡рд┐рдмрд▓ рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдВрдХрд┐рдВрдЧ рд╕реНрддрд░ рдкрд░ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдХрд┐ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдкрдиреЗ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ :)

рдореЗрд░реЗ рдХрд╛рд░реНрдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣рдордиреЗ ES рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП proxyquire рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ:

proxyquire('./mylib.mjs', {doSomething: () => 'done'})

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

await quibble.esm('./mylib.mjs', {doSomething: () => 'done'}, 'yabadabadoing') // not sure what this third param does ...

рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ рдЬреЛ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рдЙрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рд╕рд┐рдиреЙрди рдХрднреА рднреА рдИрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдордЬрд╛рдХ рдЙрдбрд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдирд╣реАрдВ рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреНрд╡рд┐рдмрд▓, рдкреНрд░реЙрдХреНрд╕реАрдХреНрд╡рд╛рдпрд░ , рдиреЙрд░реНрдорд▓рдореЙрдбреНрдпреВрд▓ рд░рд┐рдкреНрд▓реЗрд╕рдореЗрдВрдЯрдкреНрд▓рдЧрд┐рди (

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

рдореИрдВ рдареАрдХ рдпрд╣реА рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ :)

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

рд╣рд╛рдп @ fatso83!

cjs.mutableNamespace рд╡рд┐рдХрд▓реНрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реИ рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рд╕реНрдЯрдмрд┐рдВрдЧ .js рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛ рд▓реЗрдХрд┐рди .mjs _( .mjs рдлрд╛рдЗрд▓реЗрдВ рд▓реЙрдХ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ esm рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ)_ред

@jdalton рд╣рдореЗрдВ js рдмрдирд╛рдо mjs рднреЗрдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрджрдореА рдЗрд╕реЗ рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред

cc @jim-king-2000

рдореИрдВ рдиреНрдпреВрдирддрдо рд▓рд╛рдЧрдд рдХреЗ рд╕рд╛рде рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЕрдЧрд░ рд╕рдорд╛рдзрд╛рди рдЗрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛, рддреЛ рдореИрдВ рдореЙрдХ рдХреЗ рд╕рд╛рде рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдХреЛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ред рдЖрдЦрд┐рд░рдХрд╛рд░, рдПрдХ рдордЬрдмреВрдд рдСрдирд▓рд╛рдЗрди рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдХ рдЯреЗрд╕реНрдЯ рдЕрдирд┐рд╡рд╛рд░реНрдп рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди, рдЕрдВрддрд┐рдо рдЙрдкрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ, рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╕рд┐рдиреЙрди рдореЗрд░реЗ рд▓рд┐рдП "рдкреНрд░реЙрдХреНрд╕реАрд░реЗрдХреНрд╡рд╛рдпрд░" (рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ) рд▓рдкреЗрдЯрддрд╛ рд╣реИ?

@ jim-king-2000 рд╡рд╣ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред рдЖрдкрдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдирд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдПрдХ рд▓рд╛рдЧрдд рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдЕрдкрдиреА рдУрд░ рд╕реЗ рд╡рд╣рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореЙрдбреНрдпреВрд▓ рд▓реЛрдбрд░ рдХреЛ рд▓рдкреЗрдЯрдирд╛, рдЙрдиреНрд╣реЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ (рдиреЛрдб, рдмреНрд░рд╛рдЙрдЬрд╝рд░, рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд░ рдХреЗ рд╕рд╛рде/рдмрд┐рдирд╛, рдЖрджрд┐) рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдШреЛрд╖рд┐рдд рд▓рдХреНрд╖реНрдпреЛрдВ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ ред

рдореИрдВ рд╕рд┐рдиреЙрди рдФрд░ рдореЙрдбреНрдпреВрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╕рдордЭрддрд╛ (рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ)ред рдореБрдЭреЗ рдмреЗрдмреЗрд▓ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЬреЗрдПрд╕/рдиреЛрдб рдореЙрдХ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдлреНрд░реЗрдорд╡рд░реНрдХ (рдпрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдЬреИрд╕реЗ рдЬрд╛рд╡рд╛ рд╕рдордХрдХреНрд╖, рдореЙрдХрд┐рдЯреЛ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рддреЛ, рдХреНрдпрд╛ рдпрд╣ рдореМрдЬреВрдж рд╣реИ?

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЖрдкрдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП: рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдирд╣реАрдВ :sob:
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░: рд╣рд╛рдБ, рдЪреМрдЦрдЯреЗ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдХреЗ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВред

рдЬрд╛рд╡рд╛ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ рдЬрд╛рд╡рд╛ static рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдкрдХреЗ рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдЬреИрд╕рд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдореЙрдХрд┐рдЯреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдирдХрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ред

рдРрд╕рд╛ рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐, рдЪреАрдЬреЛрдВ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЕрдкрдиреА *.mjs рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ *.js ред рдпрд╣ рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдордзреНрдп рдорд╛рд░реНрдЧ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЬреНрдЮрд╛рдд рдбрд╛рдЙрдирд╕рд╛рдЗрдб рдХреЗ рдкрд░реАрдХреНрд╖рдг рдпреЛрдЧреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред

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

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

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

@ fatso83 рд╣рд░ рд╕рдордп рдорджрдж рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдХреБрддрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА? ЁЯдФ

FYI рдХрд░реЗрдВ, рдореИрдВрдиреЗ "testdouble.js" рдореЗрдВ Node.js ESM рд╕рдорд░реНрдерди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рдЬреЛ рдПрдХ рдирдХрд▓реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИред рд╣реЛ рд╕рдХрддрд╛ред рдореИрдВрдиреЗ рдЗрд╕ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ:

https://dev.to/giltayar/mock-all-you-want-supporting-es-modules-in-the-testdouble-js-mocking-library-3gh1

рдЕрдЧрд░ рдХреЛрдИ рдЗрд╕реЗ рд▓реЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рддреЛ рдпрд╣рд╛рдВ рд╕рд╣рд╛рдпрддрд╛ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА ..

@giltayar ESM рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдзрд╛рдИ! рдмрдврд╝рд┐рдпрд╛ рд▓реЗрдЦ, рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВред рд╣рдордиреЗ рд╣рдореЗрд╢рд╛ рдХрд╣рд╛ рд╣реИ рдХрд┐ рдИрдПрд╕рдПрдо рд░рдирдЯрд╛рдЗрдо рдХреЗ рдЕрдиреБрд░реВрдк рдИрдПрд╕ рдореЙрдбреНрдпреВрд▓ рд╕реНрдЯрдмрд┐рдВрдЧ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдпрд╣ рднреА рдХрд╣рд╛ рд╣реИ (рдКрдкрд░ рдХреА рддрд░рд╣) рдХрд┐ рдЗрд╕реЗ рдкреНрд░реЙрдХреНрд╕реАрдХреНрд╡рд╛рдпрд░, рд░реАрд╡рд╛рдпрд░, рдпрд╛ ... рдХреНрд╡рд┐рдмрд▓ рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдВрдХрд┐рдВрдЧ рд╕реНрддрд░ рдкрд░ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдХрд┐ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдкрдиреЗ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ :)

рдореЗрд░реЗ рдХрд╛рд░реНрдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣рдордиреЗ ES рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП proxyquire рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ:

proxyquire('./mylib.mjs', {doSomething: () => 'done'})

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

await quibble.esm('./mylib.mjs', {doSomething: () => 'done'}, 'yabadabadoing') // not sure what this third param does ...

рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ рдЬреЛ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рдЙрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рд╕рд┐рдиреЙрди рдХрднреА рднреА рдИрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдордЬрд╛рдХ рдЙрдбрд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдирд╣реАрдВ рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреНрд╡рд┐рдмрд▓, рдкреНрд░реЙрдХреНрд╕реАрдХреНрд╡рд╛рдпрд░ , рдиреЙрд░реНрдорд▓рдореЙрдбреНрдпреВрд▓ рд░рд┐рдкреНрд▓реЗрд╕рдореЗрдВрдЯрдкреНрд▓рдЧрд┐рди (

@ fatso83 рдЕрдЧрд░ рдореИрдВ рдкреВрдЫ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЗрддрдирд╛ рдЖрд╢реНрд╡рд╕реНрдд "рдХрднреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерди рди рдЬреЛрдбрд╝реЗрдВ" рдХреНрдпреЛрдВ рд╣реИ? рдореИрдВрдиреЗ рдЕрдкрдиреЗ ES6 рдореЙрдбреНрдпреВрд▓ рдХреЛрдб рдХрд╛ рдордЬрд╛рдХ рдЙрдбрд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реБрдП рдЕрдВрддрд┐рдо рджрд┐рдиреЛрдВ рдореЗрдВ рдХрдИ рдмрд╛рд░ рдпрд╣рд╛рдВ рдкрдврд╝рд╛ред

рдЬреЗрд╕реНрдЯ рдореЗрдВ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реИ, рдХреЛрдИ рднреА рдпрд╣рд╛рдБ рдирд╣реАрдВ рд╣реИ рдореИрдВрдиреЗ рд▓рдЧрднрдЧ рддрдм рддрдХ рд╣рд╛рд░ рдорд╛рди рд▓реА рдЬрдм рддрдХ рдореБрдЭреЗ @giltayar рдХрд╛ рд▓реЗрдЦ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдЗрддрдиреА рд░рд╛рд╣рддред рдореБрдЭреЗ рд╡рдХреНрд░реЛрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд╛рдо рдорд┐рд▓рд╛ рдЬрдм рддрдХ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рдирд╣реАрдВ рд╣реБрдЖ рдХрд┐ рдореИрдВ рд╕рд┐рд░реНрдл testdouble.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

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

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

рдореБрдЭреЗ рдЗрддрдиреА рдЧрд╣рд░реА рддрдХрдиреАрдХреА рд╕рдордЭ рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдХреА рдХреБрдЫ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорджрджрдЧрд╛рд░ рд╣реЛ рд╕рдХрддреА рд╣реИ

@ fatso83 рдЕрдЧрд░ рдореИрдВ рдкреВрдЫ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЗрддрдирд╛ рдЖрд╢реНрд╡рд╕реНрдд "рдХрднреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерди рди рдЬреЛрдбрд╝реЗрдВ" рдХреНрдпреЛрдВ рд╣реИ?

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

рдЖрдо рддреМрд░ рдкрд░, рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╣рд░ рдПрдХ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рд╕рдм рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рднреА рдмрдбрд╝реА рдирд╣реАрдВ, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд┐рддреНрдд рдкреЛрд╖рд┐рдд рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред

рдЬреЗрд╕реНрдЯ рдореЗрдВ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реИ, рдХреЛрдИ рднреА рдпрд╣рд╛рдБ рдирд╣реАрдВ рд╣реИ рдореИрдВрдиреЗ рд▓рдЧрднрдЧ рддрдм рддрдХ рд╣рд╛рд░ рдорд╛рди рд▓реА рдЬрдм рддрдХ рдореБрдЭреЗ @giltayar рдХрд╛ рд▓реЗрдЦ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдЗрддрдиреА рд░рд╛рд╣рддред рдореБрдЭреЗ рд╡рдХреНрд░реЛрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд╛рдо рдорд┐рд▓рд╛ рдЬрдм рддрдХ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рдирд╣реАрдВ рд╣реБрдЖ рдХрд┐ рдореИрдВ рд╕рд┐рд░реНрдл testdouble.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рд╡рд┐рднрд┐рдиреНрди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рддреЗ рд╣реИрдВред

Testdouble.js рдХреЗ рдЕрдиреБрд░рдХреНрд╖рдХ рдЕрдкрдиреА рдкрд╕рдВрдж рд╕реНрд╡рдпрдВ рдмрдирд╛рддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЛрдВрдиреЗ рдХреНрд╡рд┐рдмрд▓ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдЙрдирдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ред рдЕрдЧрд░ рдЖрдкрдХреЛ рдЙрдирдХрд╛ рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рд╣реИ, рддреЛ рд╣рд░ рддрд░рд╣ рд╕реЗ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ @searls рдФрд░ рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрдпрд╛рд░ рдФрд░ рд╕рдореНрдорд╛рди рдХреЗ

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

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

рд╣рдо рдпрд╣рд╛рдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдХреЛ-рд╕рд┐рд╕реНрдЯрдо рдХреА рд╣рд░ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИрдВред

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

рдореБрдЭреЗ рдЗрддрдиреА рдЧрд╣рд░реА рддрдХрдиреАрдХреА рд╕рдордЭ рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдХреА рдХреБрдЫ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорджрджрдЧрд╛рд░ рд╣реЛ рд╕рдХрддреА рд╣реИ

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

рдпрджрд┐ рдпрд╣ рдПрдХ рдареЛрд╕ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдмрди рдЬрд╛рддреА рд╣реИ, рддреЛ рдореБрдЭреЗ рдЗрд╕реЗ sinonjs.org рдкрд░ рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

@mroderick рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдкрд╣рд▓реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ рдХрд┐ рдЖрдк рдФрд░ рд╕рд┐рдиреЛрди рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХрд╛ рдореЗрд░рд╛ рд╕рд░реНрд╡реЛрдЪреНрдЪ рд╕рдореНрдорд╛рди рд╣реИ!

рд╣рдо рдпрд╣рд╛рдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдХреЛ-рд╕рд┐рд╕реНрдЯрдо рдХреА рд╣рд░ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИрдВред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ, рдпрд╣ рд╕рд┐рд░реНрдл рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛ рдХрд┐ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдорджрдж рдХреА рдмрдбрд╝реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ (рд╕рд┐рд░реНрдл рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди)ред

рдирдХрд▓реА рдЖрдпрд╛рдд рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╕рд┐рдиреЙрди рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ рдФрд░ рд╡рд┐рд╢реЗрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдирд┐рдкрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдЫреЛрдЯреЗ рд╕реАрдПрд▓рдЖрдИ рдЙрдкрдХрд░рдг рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреИрд╕реЗ рд╣реА рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЬреИрд╕реЗ рд╣реА рдореИрдВ рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рд▓реАрдЬ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред рдЕрдЧрд░ рдРрд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рд▓рд┐рдЦрдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рдкрд╣рд▓реЗ рднреА proxyquire рд╕рд╛рде рд╕рд┐рдиреЙрди рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рд╕рд┐рдиреЙрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕реА рдЕрдЪреНрдЫреА рдЪреАрдЬреЗрдВ рдкрдврд╝реА рд╣реИрдВред

рдореИрдВ рдкрд╣рд▓реЗ рднреА proxyquire рд╕рд╛рде рд╕рд┐рдиреЙрди рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рд╕рд┐рдиреЙрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕реА рдЕрдЪреНрдЫреА рдЪреАрдЬреЗрдВ рдкрдврд╝реА рд╣реИрдВред

рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЧрд╛рдЗрдб рд╣реИ: https://sinonjs.org/how-to/link-seams-commonjs/

рдпрджрд┐ рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ .

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

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

akdor1154 picture akdor1154  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

optimatex picture optimatex  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

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