Sinon: рдЧреЗрдЯреНрдЯрд░/рд╕реЗрдЯрд░ рдЬрд╛рд╕реВрд╕реА рдФрд░ рдареВрдВрда рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг

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

рд╣реЗ рд╕рдм,

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

Documentation Help wanted Property accessors pinned

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

рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдХреИрд╕реЗ #резреирелрел рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рджреЗрдЦрдХрд░ рдореБрдЭреЗ рдпрд╣рд╛рдВ рдкрд░реАрдХреНрд╖рдг рдорд┐рд▓реЗред

рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

spy = sinon.spy(className, 'nameOfGetterFunction', ['get'])

рдХреНрдпрд╛ рдпрд╣ рдбреЙрдХреНрд╕ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╛ рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдПрдХ рдЬреНрдЮрд╛рдд рдмрд╛рдд рднреА рдирд╣реАрдВ рд╣реИ?

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

рд╣реИ рдпрд╣ рдЖрдк рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рджреЗрдЦ рд░рд╣реЗ рдереЗ?

рдореБрдЭреЗ рдпрд╣ рд▓рд┐рдЦрд╛ рд╣реБрдЖ рднреА рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреБрд░рд╛рдирд╛ рд▓рдЧрддрд╛ рд╣реИ (рдпрд╣ рд╕рдЪ рд╣реБрдЖ рдХрд░рддрд╛ рдерд╛):

рдпрджрд┐ рдЖрдкрдХреЛ рдЧреЗрдЯрд░реНрд╕/рд╕реЗрдЯрд░реНрд╕ рдпрд╛ рдЧреИрд░-рдлрд╝рдВрдХреНрд╢рди рдЧреБрдгреЛрдВ рдХреЛ рд╕реНрдЯрдм рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ sandbox.stub рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдм рдиреЙрд░реНрдорд▓ рд╕реНрдЯрдмреНрд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдРрд╕рд╛ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдЯрдмреНрд╕ рдХреЗ рд▓рд┐рдПред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЙрдирдХреЗ рд▓рд┐рдП рдЬрд╛рд╕реВрд╕реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдХреБрдЫ рднреА рд╣реИред

рд╣рдореНрдо ... рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЧреЗрдЯрд░реНрд╕/рд╕реЗрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╕реВрд╕реА рд▓рд╛рдЧреВ рдХреА рдЧрдИ рд╣реИред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдХреНрдпреЛрдВред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореВрд▓ рд░реВрдк рд╕реЗ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:

fn=Object.getOwnPropertyDescriptor(obj, prop).get
spy=sinon.spy(fn);
Object.defineProperty(obj, prop, { get: spy })

рдЙрд╕ рдкрд░ рд╡рд╛рд░ рдХрд░рдиреЗ рдХреА рдкрд░рд╡рд╛рд╣ рд╣реИ?

рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдХреИрд╕реЗ #резреирелрел рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рджреЗрдЦрдХрд░ рдореБрдЭреЗ рдпрд╣рд╛рдВ рдкрд░реАрдХреНрд╖рдг рдорд┐рд▓реЗред

рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

spy = sinon.spy(className, 'nameOfGetterFunction', ['get'])

рдХреНрдпрд╛ рдпрд╣ рдбреЙрдХреНрд╕ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╛ рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдПрдХ рдЬреНрдЮрд╛рдд рдмрд╛рдд рднреА рдирд╣реАрдВ рд╣реИ?

рдЗрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдзрдиреНрдпрд╡рд╛рдж!

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

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

рдХреНрдпрд╛ рдХрдХреНрд╖рд╛ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рдЬрд╛рд╕реВрд╕реА рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ (рд╕реАрдзреЗ рд╡рд╕реНрддреБ рджреНрд╡рд╛рд░рд╛)?
рдореЗрд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдХрд▓реНрдкрдирд╛ рдореЗрдВ рд╣реА рд╡рд╕реНрддреБ рд╣реИ рдФрд░ рдЧреЗрдЯрдЯрд░ рд╕реЗрдЯрд░ рдХреА рдХрдХреНрд╖рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ рдХреНрдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рддрд░реАрдХрд╛ рднреА рд╣реИ?

@ рдорд╛рдЙрд╕ 9 рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдкреВрдЫ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдХреИрд╕реЗ

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

рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рд╡рд┐рд╖рдп рд╕рд┐рдиреЙрди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рдирдпрд╛ рдЯрд┐рдХрдЯ рдЦреЛрд▓реЗрдВ рдФрд░ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред

@loganhuskins рдХреЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП:
spy = sinon.spy(className, 'nameOfGetterFunction', ['get'])

рдкрд╛рдпрд╛ рдХрд┐, рдЕрднрд┐рдХрдерди рдореЗрдВ, рдЬрд╛рд╕реВрд╕реА рдкрд░ рдЬреЛрд░ рджреЗрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЬреИрд╕реЗ:
sinon.assert.calledOnce(spy.get);

рдкрд╣рд▓реЗ рдХреЗрд╡рд▓ рдЬрд╛рд╕реВрд╕реА рдкрд░ рдЬреЛрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред

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

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

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

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

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

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

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