๐ Testing JavaScript Applications ๋ฅผ ๊ณต๋ถํ๋ฉด์, ์ฅ๋ฐ๊ตฌ๋ ์์คํ ์ ์ฌ์ฉํ๋ฉด์ ์ ํ ์ญ์ , ์ ์ฒด ์ญ์ ๊ธฐ๋ฅ์ ๋ง๋ค์ด๋ณด์๋ค.
๊ทธ ์ค ์ ํ ์ญ์ ๊ธฐ๋ฅ์์, ์ฑ ์์ ์ ์๋ ๊ฒ์ ๊ทธ๋๋ก ๋ฐ์๋ค์ด๊ธฐ ๋ณด๋ค, ์ข ๋ ๋ชจ๋ํ๊ฒ ๋ณด์ฌ์ค ์ ์์๊น๋ฅผ ๊ณ ๋ฏผํ๋ค.
์ฑ ์์ ์ฝ๋
class Cart {
constructor() {
this.items = [];
}
addToCart(item) {
this.items.push(item);
}
removeFromCart(item) {
for (let i = 0; i < this.items.length; i++) {
const currentItem = this.items[i];
if (currentItem === item) {
this.items.splice(i, 1);
}
}
}
}
Array.prototype.splice()
์ฑ ์ ์์ ๋ฅผ ๋ณด๋ฉด,
1. for ๋ฌธ์ ํตํด ์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธด ์์ดํ ์ ๋งํผ `currentItem`์ ์์๋๋ก ์ฌ๋ฐฐ์ดํ๋ค.
2. ๋ง์ฝ ์ฌ๋ฐฐ์ด ๊ณผ์ ์ค์ removeFromCart()๋ก ์ ์ธํ ์์ดํ ์ด ๋ฐ๊ฒฌ ๋ ๊ฒฝ์ฐ ํด๋น ์์๋ฅผ ์ฐพ์ splice() ๋ฉ์๋๋ฅผ ํตํด ์ญ์ ํ๋ค.
splice() ๋ฉ์๋๋ ๋ฐฐ์ด์ ๊ธฐ์กด ์์๋ฅผ ์ญ์ ๋๋ ๊ต์ฒดํ๊ฑฐ๋ ์ ์์๋ฅผ ์ถ๊ฐํ์ฌ ๋ฐฐ์ด์ ๋ด์ฉ์ ๋ณ๊ฒฝํ๋ค.
// ๊ตฌ์กฐ
array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
const months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb');
console.log(months);
// Expected output: Array ["Jan", "Feb", "March", "April", "June"]
months.splice(4, 1, 'May');
console.log(months);
// Expected output: Array ["Jan", "Feb", "March", "April", "May"]
`for` ๋ฐ๋ณต๋ฌธ ์์ด ์ฌ์ฉํ ์ ์๋ ์ฌ๋ฐฐ์ด ๋ฉ์๋๊ฐ ์์ง ์์๊น ํด์ ์ฐพ์๋ณด์๋ค.
Array.prototype.filter()
filter() ๋ฉ์๋๋ ์ฃผ์ด์ง ํจ์์ ํ ์คํธ๋ฅผ ํต๊ณผํ๋ ๋ชจ๋ ์์๋ฅผ ๋ชจ์ ์๋ก์ด ๋ฐฐ์ด๋ก ๋ฐํํ๋ค.
// ๊ตฌ์กฐ
arr.filter(callback(element[, index[, array]])[, thisArg])
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter((word) => word.length > 6);
console.log(result);
// Expected output: Array ["exuberant", "destruction", "present"]
์ต์ข ์์ฑ ์ฝ๋
class Cart {
constructor() {
this.items = [];
}
addToCart(item) {
this.items.push(item);
}
removeFromCart(item) {
this.items = this.items.filter((currentItems) => currentItems !== item);
}
}
ํจ์ฌ ๋ชจ๋ํ ์ฝ๋..! ๐ ํ์ดํ ํจ์ ํํ๊ณผ ํจ๊ป ์ธ ์ ์์ด ์ข์๋ฏ.
์ฅ๋ฐ๊ตฌ๋ ์ ์ฒด ์ญ์ ์ ๊ฒฝ์ฐ์ test code์ ํจ๊ป ์ฌ๋ ค๋ณด๊ฒ ๋ค!