๋ชจ๋ ์๋ ,
ํ์ฌ # 1205์ ์ค๋ช ๋ getter ๋ฐ setter ์คํ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ฌธ์๊ฐ ์์ต๋๊น? ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ฝ๋์ ํ ์คํธ๋ฅผ ์ฝ๊ณ ํ์ํ ๊ฒฝ์ฐ ์ถ๊ฐ ํ ์ ์์ต๋๋ค. ๋๋ ๊ฝค ์ด์ฌํ ์์ํ์ง๋ง ๋ด๊ฐ ๋ฌผ์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ ๊ณณ์์ ๊ทธ๊ฒ์ ๋ณด์ง ๋ชปํ์ต๋๋ค. ๊ฐ์ฌ.
์ธ๊ฐ ์ด๊ฒ์ ๋น์ ์ด ์ฐพ๊ณ ์์๋์ง?
๋๋ ๋ํ ์ด๊ฒ์ด ์ฐ์ฌ์ง ๊ฒ์ ๋ณด์์ง๋ง, ๊ตฌ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค (์ฌ์ค์ด์๋) :
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);
์ด์ ์๋ ์คํ์ด์ ๋ํด์๋ง ์ฃผ์ฅ๋์๊ณ ์๋ํ์ง ์์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๊ตฌํ๋์์ผ๋ฉฐ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. # 1205์ ํ ์คํธ๋ฅผ ํตํด ๋ฐฉ๋ฒ์ ์์ ๋์ต๋๋ค. ์ฌ๊ธฐ์ ํ ์คํธ๋ฅผ ์ฐพ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ํ๋ฉ๋๋ค.
๋ฌธ์์ ์์ด์ผํฉ๋๊น? ์๋๋ฉด์ด ์์ ์์ ๊ทธ ๊ตฌํ์ด ์๋ ค์ง ๊ฒ์ด ์๋๋๊น?