Sinon: Getter / Setter ์ŠคํŒŒ์ด ๋ฐ ์Šคํ„ฐ ๋น™์— ๋Œ€ํ•œ ๋ฌธ์„œ

์— ๋งŒ๋“  2017๋…„ 11์›” 02์ผ  ยท  10์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: sinonjs/sinon

๋ชจ๋‘ ์•ˆ๋…•,

ํ˜„์žฌ # 1205์— ์„ค๋ช… ๋œ getter ๋ฐ setter ์ŠคํŒŒ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ฌธ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ฝ”๋“œ์™€ ํ…Œ์ŠคํŠธ๋ฅผ ์ฝ๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฝค ์—ด์‹ฌํžˆ ์ˆ˜์ƒ‰ํ–ˆ์ง€๋งŒ ๋‚ด๊ฐ€ ๋ฌผ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ ๊ณณ์—์„œ ๊ทธ๊ฒƒ์„ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ.

Documentation Help wanted Property accessors pinned

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉฐ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. # 1205์˜ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๋ฐฉ๋ฒ•์„ ์•Œ์•„ ๋ƒˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

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

๋ฌธ์„œ์— ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด์ด ์‹œ์ ์—์„œ ๊ทธ ๊ตฌํ˜„์ด ์•Œ๋ ค์ง„ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๊นŒ?

๋ชจ๋“  10 ๋Œ“๊ธ€

์ธ๊ฐ€ ์ด๊ฒƒ์€ ๋‹น์‹ ์ด ์ฐพ๊ณ  ์žˆ์—ˆ๋Š”์ง€?

๋‚˜๋Š” ๋˜ํ•œ ์ด๊ฒƒ์ด ์“ฐ์—ฌ์ง„ ๊ฒƒ์„ ๋ณด์•˜์ง€๋งŒ, ๊ตฌ์‹ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค (์‚ฌ์‹ค์ด์—ˆ๋˜) :

getter / setter ๋˜๋Š” ๋น„ ๊ธฐ๋Šฅ ์†์„ฑ์„ ์Šคํ…ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ sandbox.stub์„ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์ผ๋ฐ˜ ์Šคํ…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ ์‚ฌํ•œ ์Šคํ…์˜ ๊ฒฝ์šฐ. ๋‚˜๋Š” ๊ทธ๋“ค์„์œ„ํ•œ ์ŠคํŒŒ์ด ๋ฌธ์„œ์— ์•„๋ฌด๊ฒƒ๋„ ์—†๋‹ค๋Š” ๊ฒƒ์„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

ํ  ... ์‹ค์ œ๋กœ ๊ฒŒํ„ฐ / ์„ธํ„ฐ์— ๋Œ€ํ•ด ์ŠคํŒŒ์ด๊ฐ€ ๊ตฌํ˜„๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋„ ์ด์œ ๋„ ๋ชจ๋ฅด๊ฒ ๋‹ค. ๊ตฌํ˜„์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

์ฐ”๋Ÿฌ ๋ณด์‹œ ๊ฒ ์–ด์š”?

๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉฐ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. # 1205์˜ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๋ฐฉ๋ฒ•์„ ์•Œ์•„ ๋ƒˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

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

๋ฌธ์„œ์— ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด์ด ์‹œ์ ์—์„œ ๊ทธ ๊ตฌํ˜„์ด ์•Œ๋ ค์ง„ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๊นŒ?

๋ฌธ์„œํ™”ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

ํ™•์‹คํžˆ, ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋…น์•„์›ƒ์‹œํ‚ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์ตœ๊ทผ ํ™œ๋™์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™์œผ๋กœ ์˜ค๋ž˜๋œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ ํ™œ๋™์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉด ํ์‡„๋ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ๊ธฐ์—ฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

ํด๋ž˜์Šค์—†์ด ์ŠคํŒŒ์ด ํ•  ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?
์‚ฌ์–‘์— ๊ฐ์ฒด ๋งŒ ์žˆ๊ณ  getter setter์˜ ํด๋ž˜์Šค๋ฅผ ์š”๊ตฌํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋„ ์žˆ์Šต๋‹ˆ๊นŒ?

@ mouse9 ๋‹น์‹ ์ด ๋ฌด์—‡์„ ์š”๊ตฌํ•˜๋Š”์ง€, ๊ทธ๊ฒƒ์ด

์–ด์จŒ๋“  ์šฐ๋ฆฌ๋Š” GitHub ๋ฌธ์ œ ๋ชฉ๋ก์„ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ๋ฒ„๊ทธ ๋ฐ ๊ธฐ๋Šฅ ํ† ๋ก ์— ์ค‘์ ์„ ๋‘๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ‹ฐ์ผ“์€ ์‚ฌ์šฉ ์งˆ๋ฌธ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. StackOverflow์— ๊ฒŒ์‹œํ•˜๊ณ  sinon ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•˜๋ฉด ๋” ํฐ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์งˆ๋ฌธ์— ๋‹ต๋ณ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์ œ๊ฐ€ Sinon์— ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐ๋˜๋ฉด ์ƒˆ ํ‹ฐ์ผ“์„ ์—ด๊ณ  ๋ฌธ์ œ๋ณด๊ณ  ์ง€์นจ์„ ๋”ฐ๋ฅด์‹ญ์‹œ์˜ค.

@loganhuskins ์˜ ์ฝ”๋“œ :
spy = sinon.spy(className, 'nameOfGetterFunction', ['get'])

์ฃผ์žฅ์—์„œ spy.get ์—
sinon.assert.calledOnce(spy.get);

์ด์ „์—๋Š” ์ŠคํŒŒ์ด์— ๋Œ€ํ•ด์„œ๋งŒ ์ฃผ์žฅ๋˜์—ˆ๊ณ  ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰