Sinon: рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреА рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ рд╡рд┐рдзрд┐ рд╕реНрдЯрдмреНрд╕/рдЬрд╛рд╕реВрд╕реЛрдВ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 2 рдордИ 2018  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: sinonjs/sinon

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдкрд░ рдХрд┐рд╕реА рднреА рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, restore() рдирдХрд▓реА рдпрд╛ рдЬрд╛рд╕реВрд╕реЛрдВ рдХреЛ рдареАрдХ рд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рд┐рдиреЙрди v5.0.2 рдкрд░ рдПрдХ рдиреНрдпреВрдирддрдо рд░реЗрдкреНрд░реЛ рдХреЗрд╕:

const sinon = require('sinon');
const myApi = {
  someMethod() {
    console.log('test method!');
  }
};

sinon.stub(myApi, 'someMethod');
sinon.restore();
sinon.stub(myApi, 'someMethod');
// TypeError: Attempted to wrap someMethod which is already wrapped

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ extend рдореЗрдВ lib/sinon.js , рдЕрди-рд╕реИрдВрдбрдмреЙрдХреНрд╕ stub/spy/etc. рд╕реЗ рдирд┐рд░реНрдпрд╛рдд apiMethods рдЕрдВрдд рд╕реИрдВрдбрдмреЙрдХреНрд╕ рддрд░реАрдХреЛрдВ рдкреАрдЫрд╛, рдФрд░ рдЗрддрдирд╛ restore() рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдПрдкреАрдЖрдИ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдФрд░ рд╕реНрд░реЛрдд lib/sinon.js рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреАрд╖реНрдЯ рдЙрдкрдпреЛрдЧ рд╣реИред

рдореИрдВрдиреЗ рдХреЗрд╡рд▓ stub рдФрд░ spy рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдХреЛрдИ рдЕрдиреНрдп рдЫрд╛рдпрд╛рдВрдХрд┐рдд рд╡рд┐рдзрд┐рдпрд╛рдВ рднреА рдЗрд░рд╛рджреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреАред

рдореИрдВрдиреЗ рдЗрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдиреЛрдб v8.9.4 рдФрд░ рдХреНрд░реЛрдо 66.0.3359.117 рдкрд░ рдХрд░реНрдо/рдХреНрд░реЛрдореЗрдбреНрд░рд┐рд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд▓рдЧрддрд╛ рд╣реИред

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

рдЕрдЪреНрдЫреА рддреНрд░реБрдЯрд┐ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде, рдЕрдзрд┐рдХрд╛рдВрд╢ рдмрдЧ рдХреЛ рдХреБрдЪрд▓рдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ

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

рдЖрдкрдХреА рд╡рд┐рд╕реНрддреГрдд рддреНрд░реБрдЯрд┐ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж

рдпрд╣ [email protected] рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдЗрд╕реЗ рдЗрддрдиреА рдЬрд▓реНрджреА рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА :)

рдЕрдЪреНрдЫреА рддреНрд░реБрдЯрд┐ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде, рдЕрдзрд┐рдХрд╛рдВрд╢ рдмрдЧ рдХреЛ рдХреБрдЪрд▓рдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ

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

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

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

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

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

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

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