์ „์ฒด ๊ธ€

Front-end Developer
Vue BDD

Vue BDD - Intro

๐Ÿ“Œ ๋ชฉ์ฐจ Introduction BDD๋ž€ ๋ฌด์—‡์ธ๊ฐ€? BDD๋ฅผ ์™œ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€? Vue์—์„œ ์–ด๋–ป๊ฒŒ BDD๋ฅผ ์ ์šฉํ•˜๋Š”๊ฐ€? Conclusion Reference ๐Ÿ“Œ Introduction Vue TDD๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๊ทธ๋™์•ˆ TDD์˜ ํ•œ๊ณ„์ ๊ณผ ์ข€๋” ์ข‹์€ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ƒ๊ฐ์„ ํ•˜๋‹ค๊ฐ€ BDD๋ฅผ ์ ‘ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํšŒ์‚ฌ์—์„œ TDD๋„ ๋ฌผ๋ก  ๋งค์šฐ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.(์ฃผ๋กœ unit test) ์ด๋ฒˆ ํฌ์ŠคํŒ…์€ ๊ทธ๋ž˜์„œ ๊ทธ๋Ÿฌํ•œ ํ•œ๊ณ„์ ์„ ๊ทน๋ณตํ•˜๋Š” BDD๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ๋ ค๋“œ๋ฆฌ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์ฝ”๋“œ๋Š” ๊นƒ ๋ ˆํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.๐ŸŽ‰ ๐Ÿ“Œ BDD๋ž€ ๋ฌด์—‡์ธ๊ฐ€? BDD๋Š” Behavior Driven Development์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ์ด๋ฏธ์ง€๋ฅผ ๋ด์ฃผ์„ธ์š”. ์ด์ฒ˜๋Ÿผ TDD์˜ ์ƒ์œ„ ๋ฒ„์ „์ด ๋ฐ”๋กœ BDD์ž…๋‹ˆ๋‹ค.๐ŸŽ‰ ์ˆœ์„œ๋Š” BDD๋ฅผ ํ•˜์—ฌ fe..

Design Pattern

Constructor Pattern

๐Ÿ“Œ ๋ชฉ์ฐจ Object Creation Constructor in es5 fucntion Constructor in prototype Constructor in Class ๐Ÿ“Œ Object Creation ๋นˆ Object๋ฅผ ์ƒ์„ฑํ•˜๋Š” 3๊ฐ€์ง€ ๋ฐฉ๋ฒ• // 1. const object1 = {}; // 2. const object2 = Object.create(Object.prototype); // 3. const object3 = new Object(); Object์— key์™€ value๋ฅผ ํ• ๋‹นํ•˜๋Š” 4๊ฐ€์ง€ ๋ฐฉ๋ฒ• Dot Syntax newObject.key = "value"; Square Syntax newObject["key"] = "value"; Object.defineProperty Syntax Object...

Vue TDD

Vue TDD - ๋ฒˆ์™ธ2 (mixins tesing)

๐Ÿ“Œ ๋ชฉ์ฐจ 00.Introduction 01.Mixin Testํ•˜๊ธฐ 02.Conclusion ๐Ÿ“Œ 00.Introduction ์ด๋ฒˆ ํฌ์ŠคํŒ…์€ mixins์˜ ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋‹ค๋ฃน๋‹ˆ๋‹น. ๐ŸŽ‰ mixins๋Š” ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€ ์•Š์•„์š”.(์ปดํฌ๋„ŒํŠธ ํ…Œ์ŠคํŠธ์™€ ๋น„์Šทํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.) ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์–ด๋–ป๊ฒŒ mixins๋ฅผ ํ…Œ์ŠคํŒ…ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. mixins๋Š” counter example๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์ฝ”๋“œ๋Š” ์—ฌ๊ธฐ์—์„œ ๋ณด์‹ค์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ 01.Mixin Testํ•˜๊ธฐ ์ด๋ฒˆ ํฌ์ŠคํŒ…์€ ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ๋จผ์ € counter mixins ์ฝ”๋“œ๋ฅผ ์งœ๋ณด๊ณ  ๊ทธ๋’ค์— ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์ฝ”๋“œ๋Š” ์ด๋ ‡๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. // CounterMixins.js export default { data: () => ({ count..

Design Pattern

Vue Design Patterns - Builder Director Pattern

๐Ÿ“Œ ๋ชฉ์ฐจ ์„œ๋ก  Builder-Direrctor Pattern ์ด๋ž€? Builder-Director Pattern Vue์— ์ ์šฉํ•ด๋ณด๊ธฐ(FormBuilder) Implementing Vuex Implementing Vee-Validate Conclusion Reference ๐Ÿ“Œ ์„œ๋ก  Component๋กœ vue๋ฅผ ๊ด€๋ฆฌ ํ• ๋•Œ ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋“ค์„ ๋งˆ์ฃผ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. Components |_SignInForm.vue |_CreditCardFrom.vue |_RegisterFrom.vue |_EditForm.vue |_SignUpForm.vue |_TeamAddForm.vue |_... ๋งŒ์•ฝ ์ด ์ˆ˜๋งŽ์€ Form๋“ค์„ |_FormBuilder.vue |_FormBuilder.js |_FormDirector.js ๋กœ ..

Vue TDD

Vue TDD - ๋ฒˆ์™ธ1 (Test Double)

๋ชฉ์ฐจ Introduction What is Test Double Stub Spy Mock Conclusion Reference ๐Ÿ“ŒIntroduction ์ด๋ฒˆํŽธ์€TDD๋ฅผ ํ•˜๊ธฐ์œ„ํ•ด test double์ด๋ผ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋ถ€๊ฐ€์ ์œผ๋กœ ์•Œ์•„๋ณด๋Š” ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค. ๐Ÿ“ŒWhat is Test Double? ํ…Œ์ŠคํŠธ ๋”๋ธ”์ด๋ž€ ์‹ค์ œ ๊ฐ์ฒด๋ฅผ ๋Œ€์‹ ํ•ด์„œ ํ…Œ์ŠคํŒ…์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๋ฐฉ๋ฒ•์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‹ค์ œ api ํ†ต์‹ ์„ ํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค. asnyc function getTodos() { await axios.get('jsonplace-holder/todos'); } getTodos๋ฅผ ํ…Œ์ŠคํŒ…ํ•˜๋ ค๋ฉด ์‹ค์ œ ๋„คํŠธ์›Œํฌ api๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์ƒํƒœ์— ์˜ํ–ฅ์„ ๋ฐ›์„ ๊ฒƒ์ด๊ณ  ํ•ญ์ƒ..

Vue TDD

Vue TDD - ํšŒ๊ณ ํŽธ

๐Ÿ“Œ ๋ชฉ์ฐจ ์„œ๋ก  TDD๋ฅผ ํ•˜๋ฉด์„œ ๊ฒช์—ˆ๋˜ ์–ด๋ ค์›€๋“ค TDD๋ฅผ ํ•˜๋ฉด์„œ ์ข‹์•˜๋˜ ์ ๋“ค ๊ฒฐ๋ก  ๐Ÿ“Œ ์„œ๋ก  ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๊ทธ๋™์•ˆ ๋‹ค๋ค˜๋˜ tdd์— ๊ด€ํ•ด ํšŒ๊ณ  ํ•ด๋ณด๋Š” ํฌ์ŠคํŒ… ์ž…๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ tdd๋ฅผ ํ•˜๋ฉด์„œ ๊ฒช์—ˆ๋˜ ์–ด๋ ค์›€๋“ค ๊ทธ๋ฆฌ๊ณ  ๋Š๊ผˆ๋˜ ์ƒ๊ฐ๋“ค์„ ์ •๋ฆฌํ•ด ๋ณด๋Š” ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค. ๐Ÿ“Œ TDD๋ฅผ ํ•˜๋ฉด์„œ ๊ฒช์—ˆ๋˜ ์–ด๋ ค์›€๋“ค TDD๋ฅผ ํ•˜๋ฉด์„œ ๊ฒช์—ˆ๋˜ ์–ด๋ ค์›€๋“ค์€ ๋‹ค์Œ ์„ธ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋””๊นŒ์ง€ test๋ฅผ ํ•ด์•ผํ• ๊นŒ? ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์˜์กด์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ์„๊นŒ? testcase๊ฐ€ ์ž˜๋ชป ๋˜๋ฉด ์–ด์ฉŒ์ง€? 1. ์–ด๋””๊นŒ์ง€ test๋ฅผ ํ•ด์•ผํ• ๊นŒ? ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ test code๋กœ ์ปค๋ฒ„ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋งค์šฐ ์–ด๋ ต๊ณ  ๋น„์ƒ์‚ฐ์ ์ธ ์ผ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋””๊นŒ์ง€ testcode๋ฅผ ์ž‘์„ฑ์„ ํ•ด์•ผํ• ๊นŒ์š”? ์–ด๋Š ๋ถ€๋ถ„์—์„œ ์‹ค์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ์ด ๋‚ ๊นŒ์š”? ์ด๋Ÿฐ๊ฒƒ๋“ค์€ ์–ด์ฉ”์ˆ˜ ์—†๋Š” ๊ฒฝํ—˜์ด๋ผ๊ณ  ์ƒ๊ฐ..

Vue TDD

Test code ์‰ฝ๊ฒŒ ์“ฐ๊ธฐ - 1

๋ชฉ์ฐจ vscode snippet ์ด๋ž€? vscode snippet ์‚ฌ์šฉํ•˜๊ธฐ ๐Ÿ“Œ 1. vscode snippet ์ด๋ž€? ๋ฏธ๋ฆฌ ์ง€์ •ํ•ด๋‘” ์˜ˆ์•ฝ์–ด๋กœ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ ์ž…๋‹ˆ๋‹ค. ์ด๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ์ผ์ด ์ณ์•ผํ•˜๋Š” describe('', () => {})์™€ it('', () => {}) ๋ฅผ ์ž๋™์ ์œผ๋กœ ์ƒ์„ฑํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ 2. vscode snippet ์‚ฌ์šฉํ•˜๊ธฐ ์„ค์ • ๋จผ์ € Code > Preferences > User Snippets๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. file์ด๋ฆ„์„ ์ •์˜ํ•˜๊ณ  javascript๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์ด๋Ÿฐ ํŒŒ์ผ์ด ์—ด๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด์ œ ์ด๋ ‡๊ฒŒ ์˜ˆ์•ฝ์–ด๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "describe": { // ์ œ๋ชฉ "prefix": "desc", // ์˜ˆ์•ฝ์–ด "body": "descr..

Vue TDD

Vue TDD - E2E ํŽธ

Table of Content Introduction Usage of Cypress1 Usage of Cypress2 Usage of Cypress3 Usage of Cypress4 Conclusion Reference ๐Ÿ“Œ Introduction ์•ˆ๋…•ํ•˜์„ธ์š”. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” e2e test๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. Cypress๋ฅผ ์ด์šฉํ•˜์—ฌ ์ง„ํ–‰ํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐ŸŽ‰ ์ด๋ฒˆ ํฌ์ŠคํŒ…์€ ๊ฐ„๋‹จํ•˜๊ฒŒ tdd-todo๋ฅผ ํ†ตํ•˜์—ฌ 5๊ฐœ์˜ todo๋ฅผ ์ถ”๊ฐ€ํ•ด๋ณด๊ณ  5๊ฐœ๊ฐ€ ์ •๋ง๋กœ ์ถ”๊ฐ€๊ฐ€ ๋ฌ๋Š”์ง€์— ๊ด€ํ•œ e2eํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿšจํ•ด๋‹น ํฌ์ŠคํŒ…์—์„œ๋Š” ์„ค์น˜ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค๋ฃจ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Cypress์˜ ๋ฌธ๋ฒ•๊ณผ ๊ฐ™์€ ์ž์„ธํ•œ ๋ฐฉ๋ฒ•์€ ๋‹ค๋ฃจ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ Usage of Cypress1 Cypress๋ฅผ ์ด์šฉํ•˜๊ธฐ ์ „์— DOM ํƒ์ƒ‰ ํ• ..

eddie0329
Eddie Sunny's Blog