-
Notifications
You must be signed in to change notification settings - Fork 10
week4 tech from
- ํ์ํ ์ด์ : ํ ์ํฉ์์ api๋ ์๊ณ ์์ผ๋ก๋ ๊ฑฐ์ ์์๊ธธ๊ฒ. socket์ ํ ์คํธํ์ง ์์ผ๋ฉด ํ ์คํธํ ๋งํ ์ฝ๋๊ฐ ์๋ค.
- socket.io ํ ์คํธ ํ๋ ๋ฒ: server test๋ฅผ ํ๊ธฐ์ํด test์ฝ๋์์ ํด๋ผ์ด์ธํธ๋ฅผ ๋ง๋ ๋ค. ๊ทธ ํด๋ผ์ด์ธํธ๋ก ์๋ฒ์ ์ ์ํ๋ค. connect ์ด๋ฒคํธ๋ถํฐ ํ ์คํธํ๋ค. testํ ๋ ๋ค listener์ ๋ค์ด์ค๋์ง ํ์ธํด์ผํ๊ธฐ ๋๋ฌธ์ callbackํจ์ ์์ done()์ ์จ์ค์ ์ ํํ ํ ์คํธํ๋ค. api ํ ์คํธ์ฒ๋ผ socket๋ emit๊ณผ on์ด ๋ฐ๋ก ์ผ์ด๋๋ ์ด๋ฒคํธ๋ค์ ํ ์คํธํ ์ ์๋ค. on์ ๋จผ์ ๋ฌ์์ฃผ๊ณ ๊ทธ์ ํด๋นํ๋ event๋ฅผ emitํ๋ค.
- All-in-one ํ ์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. Jest ์ด์ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ํ ์คํธํ๋ผ๋ฉด ์ฌ๋ฌ๊ฐ์ง ํ ์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์กฐํฉํด์ ์ฌ์ฉํ๊ณค ํ์๋ค. ํ์ง๋ง Jest๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ๋๋ง ์ค์นํ๋ฉด, Test Runner์ Test Mathcher ๊ทธ๋ฆฌ๊ณ Test Mock ํ๋ ์์ํฌ๊น์ง ์ ๊ณตํด์ฃผ๊ธฐ ๋๋ฌธ์ ์๋นํ ํธ๋ฆฌํ ๊ฒ ๊ฐ๋ค.
-
jest ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์นํ๊ธฐ
npm i -D jest
-
test script ์์ ํ๊ธฐ
- package.json ํ์ผ์ ์ด๊ณ test ์คํฌ๋ฆฝํธ๋ฅผ jest๋ก ์์ ํ๋ค.
"scripts": { "test": "jest" },
- ๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ์ฃผ๊ณ ์ถ์ option์ ์ถ๊ฐํ ์ ์๋ค.
-
ํ ์คํธ ์ฝ๋ ์์ฑํ๊ธฐ
- test / it : ํ ์คํธ ํ๋๋ฅผ ์์ฑํ ๋ ์ฌ์ฉํ๋ ํค์๋์ด๋ค.(ํ๋์ ํ ์คํธ ๋จ์) ์๋๋ ์์์ด๋ค.
test('socket connect test', (done) => { socket.on('connect', () => { done(); }); });
- describe : describe ๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ฌถ์ ์ ์๋ค.
describe('socket.io test', () => { beforeAll(() => { ... }); afterAll(() => { ... }); test('socket connect test', (done) => { ... }); test('[EMIT] \'enter_room\' event test', (done) => { ... }); });
- ์๋์ Methods๋ค์ ๋ชจ๋ scope๊ฐ ์๋ค. ์ ์ญ์ ์ฐ๋ฉด ๋ชจ๋ ํ ์คํธ์ ์ ์ฉ๋๊ณ ํ๋์ describe์์ ๋ฃ์ผ๋ฉด ๊ทธ describe์์ ์๋ test์๋ง ์ ์ฉ๋๋ค. ์์๋ ์์ ์ฝ๋์ ๊ฐ๋ค.
- afterAll(fn, timeout): ๋ชจ๋ ํ ์คํธ๊ฐ ๋๋๊ณ ํ๋ฒ ์คํ๋๋ค.
- afterEach(fn, timeout): ํ๋์ ํ ์คํธ๊ฐ ๋๋ ๋ ๋ง๋ค ๋งค๋ฒ ์คํ๋๋ค.
- beforeAll(fn, timeout): ๋ชจ๋ ํ ์คํธ๊ฐ ์์ํ๊ธฐ ์ ์ ํ๋ฒ ์คํ๋๋ค.
- beforeEach(fn, timeout): ํ๋์ ํ ์คํธ๊ฐ ์์ํ๊ธฐ ์ ์ ๋งค๋ฒ ์คํ๋๋ค.
- toEqual(): ๋ ๊ฐ์ด ๊ฐ์์ง ๋น๊ตํ๋ Matcher์ด๋ค. object๊ฐ ์ ํํ ๊ฐ์์ง ํ๋จํ ์ ์๋ค. javascript์์
===
์ ๊ฐ๋ค.expect(response).toEqual(value);
- toBeTruthy(), toBeFalsy(): ๊ฐ์ด false์ธ์ง true์ธ์ง ํ์ธํ๋ Matcher์ด๋ค.
expect(response).toBeTruthy(); // response๊ฐ true์ธ์ง ํ์ธ
- toHaveLength(): object์ ๊ธธ์ด๋ฅผ ํ์ธํ๋ Matcher์ด๋ค.
expect(response).toHaveLength(3);
- toContain(): array์ ํฌํจํ๋์ง ํ์ธํ๋ Matcher์ด๋ค.
expect(response).toContain('hello');
- toThrow(): ์๋ฌ๋ฅผ throw()ํ๋์ง ํ์ธํ๋ Matcher์ด๋ค.
expect(() => { drinkFlavor('octopus'); }).toThrow();
- ๊ฒฐ๊ณผ : ๋ฌธ์ํ ํ์ด์ง
- JSDoc์ Javascript๋ฅผ ์ํ API ๋ฌธ์ ์์ฑ๊ธฐ์ด๋ค. ์์ค์ฝ๋์ ์ง์ ๋ฌธ์ํ ์ฃผ์์ ์์ฑํ๊ณ , JSDoc์์ ์ด๋ฅผ ํ์ํด HTML ๋ฌธ์๋ฅผ ์ ๊ณตํ๋ค.
- VS Code๋ ๋ค์ํ JSDoc ์ฃผ์์ ์ดํดํ๊ณ , ์ด ์ฃผ์์ Intellisense์๊ฒ ์ ๊ณตํ๋ค. ๊ทธ์ ๋ฐ๋ผ Javascript์์๋ type ์ ๋ณด๋ฅผ ๋ณผ ์ ์๋ค. ๋ฐ๋ผ์ ์ฝ๋ ์์ฑ์ type check๋ฅผ ํ ์ ์๋ค.
- ์ค์ ํํ๋ก์ ํธ ์ฝ๋์ ์์ฑํ JSDoc ์ฃผ์
/** * @param {number} newIndexX * @param {number} newIndexY * @returns {Boolean} ์์ง์์ด ๊ฐ๋ฅํ์ง ์ฌ๋ถ */ _canBeMoved(newIndexX, newIndexY) { if (newIndexX < 0 || newIndexX >= ROOM.FIELD_COLUMN) return false; if (newIndexY < 0 || newIndexY >= ROOM.FIELD_ROW) return false; if (this.indexOfCharacters[newIndexX][newIndexY] !== undefined) return false; return true; }
- ๊ฒฐ๊ณผ
-
์ญ์ JSDoc์ ์ดํดํ๋ API ๋ฌธ์ํ ์์คํ ์ด๋ค.
-
JSDoc์ ์ฃผ์ ํ์์ ์๋ฏธํ๊ณ , JSDoc์ ์ด์ฉํด์ ์๋์ผ๋ก ๋ฌธ์๋ฅผ ์์ฑํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ณ๊ฐ๋ผ๊ณ ์๊ฐํด์ ์ฐพ์๋ณด๋ค๊ฐ documentation.js๋ฅผ ์ฌ์ฉํด์ฃผ๊ธฐ๋ก ํ๋ค. (์ฐธ๊ณ ๋งํฌ : https://meetup.toast.com/posts/208)
- ์ ๋งํฌ์์ ์ธ๊ธํ documentation.js์ ์ฅ์ ๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
โข ES5, ES2017, JSX, Vue, Flow ํ์ ์ ์ง์ํ๋ค. โข JSDoc ํ์ฑ ๋ฐ์ดํฐ๋ฅผ ๋งํฌ๋ค์ด, JSON์ผ๋ก ์ ๊ณตํ๋ค. โข ๋ ธ๋ ํ๊ฒฝ์์ ์ฌ์ฉํ ์ ์๋ ์ฌ์ฉ์ API๋ฅผ ์ ๊ณตํ๋ค.
-
serve, watch ๋ฑ ํธ๋ฆฌํ CLI ๋ช ๋ น๋ค๋ ์ง์ํด์ค๋ค.
-
$ documentation build index.js -f md $ documentation build src/** -f html -o docs/apidocs # document index.js, ignoring any files it requires or imports $ documentation build index.js -f md --shallow # build and serve HTML docs for app.js $ documentation serve app.js # build, serve, and live-update HTML docs for app.js $ documentation serve --watch app.js
-
๋ฌธ์ํ ๊ฒฐ๊ณผ
-
๊ฒ์ ๋ด ๋ชจ๋ธ์ ๋ฉ์๋๋ค์ด ๋ง์์ง๊ณ , ๋ก์ง์ด ๋ณต์กํด์ง๋ฉด์ ์ธ์๋ก ๋ฐ๋ ๊ฐ์ ๊ฐ์์ ํ์ , ๋ฐํํ๋ ๊ฐ์ด ์๋์ง ์์ผ๋ฉด ํ์ ์ ๋ฌด์์ธ์ง ๋ฑ์ ์๊ธฐ๊ฐ ์ด๋ ค์์ง๋ค.
-
Jsdoc์ ์์ฑํด์ฃผ๋ฉด ํ ๊ณณ์์ ์์ฑํ ํจ์๋ฅผ ๋ค๋ฅธ ๊ณณ์์ ์ฌ์ฉํ ๋๋ ๋ฐ์์ผ ํ๋ ์ธ์์ ๋ฐํํ๋ ๊ฐ์ด ๋ฌด์์ธ์ง ๋ฑ์ ์ ์ ์๋ ์ฅ์ ์ด ์์๋ค.
-
๊ฑฐ๊ธฐ์ ๋ํด documentation.js๋ฅผ ์ฌ์ฉํด ํ์ฌ ํ ๋ด์์ ์ฌ์ฉํ๊ณ ์๋ ๋ชจ๋ธ๊ณผ ๋ชจ๋ธ์ด ๊ฐ๊ณ ์๋ ๋ฉ์๋๋ค์ ์ฝ๊ฒ ๋ฌธ์ํํด์ ๋ณผ ์ ์๊ฒ ๋๋ค.
-
ํ๋ก์ ํธ๊ฐ ์ปค์ง์๋ก ์ด๋ฐ ๋ฐฉ์์ ์ ์ฉํ ๊ฒ ๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ฌ ํ๋ก์ ํธ์์ ๋ฉ์๋๋ค์ ๋ง์ง๋ง, ๋ฐ๋ ์ธ์๋ฑ์ ๊ทธ๋ ๊ฒ๊น์ง ๋ณต์กํ์ง ์์์ JSDoc์ ์ต๋ ํ์ฉํ๊ณ ์์ง๋ ์์ ๊ฒ ๊ฐ๋ค.
-
๋จ, TypeScript๋ฅผ ์ฌ์ฉํ๋ค๋ฉด type check๋ฅผ ํ๊ธฐ ์ํด์ JSDoc์ ์ฌ์ฉํ๋ ์ผ์ ์์ง ์์๊น ์๊ฐํ๋ค.