Sinon: рд╣рдо рдПрдХ рдирдИ рддреНрд░реБрдЯрд┐ рд╡рд╕реНрддреБ рдмрдирд╛рдиреЗ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 1 рдлрд╝рд░ре░ 2018  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: sinonjs/sinon

https://github.com/sinonjs/sinon/blob/4310343393b16b92b56526ab4614da4eb2886efa/lib/sinon/default-behaviors.js#L176

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

bluebird.rejects('Something')
    .catch(e => e === 'Something' /* true */, () => console.log(typeof e) /*string*/)
    .catch(() => console.log('should not be here'));

рд╣рд╛рд▓рд╛рдБрдХрд┐ sinon.stub().usingPromise('bluebird').rejects('Something'); рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХреБрдЫ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рддреНрд░реБрдЯрд┐ рд╡рд╕реНрддреБ рдмрди рдЬрд╛рддреА рд╣реИред рдмрд┐рд▓реНрдХреБрд▓ рдЕрдкреЗрдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдХреЛрдИ рдХрд╣реЗ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рджреЗрд╢реА рд╡рд╛рджреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЖрдЗрдП рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ!

Promise.reject('Something')
     .catch(e => {
        console.log(e === 'Something'); // true
        console.log(typeof e); // string
    });

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

try { 
    throw 'Something'; 
} catch (e) { 
    console.log(e === 'Something');  // true
    console.log(typeof e); // string
}
Bug Help wanted pinned

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

рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдФрд░ рдЪрд░реНрдЪрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рддреНрд░реБрдЯрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХ рддрд░рдл рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдЖрдо рддреМрд░ рдкрд░

const example = sinon.stub().rejects(something);

рдЬреИрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

const example = () => Promise.reject(something);

рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдпрд╣ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ something рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИред рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдПрдХ рдмрдЧ рд╣реИред

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

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдХреЛрдИ рдХрд╣реЗ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рджреЗрд╢реА рд╡рд╛рджреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЖрдЗрдП рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ!

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

рд╕рд┐рдиреЙрди рдЕрдиреБрд░рдХреНрд╖рдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдЕрд╡рдЧрдд рд╣реИрдВ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ рдХрд┐ Promise.reject() рдЖрдк рдЬреЛ рдХреБрдЫ рднреА рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗред

рдореИрдВ рдХреБрдЫ рдХреЛрдб рдмрдирд╛рдП рд░рдЦ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рддрд╛рд░реЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╕рд╛рде рд╡рд╛рджреЛрдВ рдХреЛ рдЦрд╛рд░рд┐рдЬ String рдХреЗ рдмрдЬрд╛рдп Error рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдбреЗрд╡рд▓рдкрд░, рдЬреЛ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдХрд┐ рд╣рдо рдЖрдЬ рдХреНрдпрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдкрдХрд╛рд░ рдХрд░ рд░рд╣реА рд╣реИред рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХреЛ рдХреИрдкреНрдЪрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рджреВрд╕рд░реА рдУрд░ Error рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ rejects() рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдбреАрдмрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓ рд╕рдХреЗ рдХрд┐ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реБрдЖред

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

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

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

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

рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдФрд░ рдЪрд░реНрдЪрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рддреНрд░реБрдЯрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХ рддрд░рдл рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдЖрдо рддреМрд░ рдкрд░

const example = sinon.stub().rejects(something);

рдЬреИрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

const example = () => Promise.reject(something);

рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдпрд╣ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ something рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИред рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдПрдХ рдмрдЧ рд╣реИред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

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

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

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

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

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

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

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