const { deleteMemo } = require("../../src/memo/deleteMemo");
describe("deleteMemo", () => {
test("정상 id이면 memo 삭제에 성공한다", async () => {
const result = await deleteMemo(1);
expect(result).toBe(true);
});
test("id가 없으면 에러 발생", async () => {
await expect(deleteMemo()).rejects.toThrow("id");
});
test("id가 null이면 에러 발생", async () => {
await expect(deleteMemo(null)).rejects.toThrow("id");
});
test("id가 문자열이면 에러 발생", async () => {
await expect(deleteMemo("1")).rejects.toThrow("id");
});
test("id가 0이면 에러 발생", async () => {
await expect(deleteMemo(0)).rejects.toThrow("id");
});
test("존재하지 않는 id이면 에러 발생", async () => {
await expect(deleteMemo(999)).rejects.toThrow("memo is not find");
});
});
hongseongchae@hongseongchaeui-MacBookPro tdd_study % npm test
> tdd_study@1.0.0 test
> jest
FAIL __test__/memo/deleteMemoList.test.js
● deleteMemo › 정상 id이면 memo 삭제에 성공한다
TypeError: deleteMemo is not a function
3 | describe("deleteMemo", () => {
4 | test("정상 id이면 memo 삭제에 성공한다", async () => {
> 5 | const result = await deleteMemo(1);
| ^
6 |
7 | expect(result).toBe(true);
8 | });
at Object.deleteMemo (__test__/memo/deleteMemoList.test.js:5:26)
● deleteMemo › id가 없으면 에러 발생
TypeError: deleteMemo is not a function
9 |
10 | test("id가 없으면 에러 발생", async () => {
> 11 | await expect(deleteMemo()).rejects.toThrow("id");
| ^
12 | });
13 |
14 | test("id가 null이면 에러 발생", async () => {
at Object.deleteMemo (__test__/memo/deleteMemoList.test.js:11:18)
● deleteMemo › id가 null이면 에러 발생
TypeError: deleteMemo is not a function
13 |
14 | test("id가 null이면 에러 발생", async () => {
> 15 | await expect(deleteMemo(null)).rejects.toThrow("id");
| ^
16 | });
17 |
18 | test("id가 문자열이면 에러 발생", async () => {
at Object.deleteMemo (__test__/memo/deleteMemoList.test.js:15:18)
● deleteMemo › id가 문자열이면 에러 발생
TypeError: deleteMemo is not a function
17 |
18 | test("id가 문자열이면 에러 발생", async () => {
> 19 | await expect(deleteMemo("1")).rejects.toThrow("id");
| ^
20 | });
21 |
22 | test("id가 0이면 에러 발생", async () => {
at Object.deleteMemo (__test__/memo/deleteMemoList.test.js:19:18)
● deleteMemo › id가 0이면 에러 발생
TypeError: deleteMemo is not a function
21 |
22 | test("id가 0이면 에러 발생", async () => {
> 23 | await expect(deleteMemo(0)).rejects.toThrow("id");
| ^
24 | });
25 |
26 | test("존재하지 않는 id이면 에러 발생", async () => {
at Object.deleteMemo (__test__/memo/deleteMemoList.test.js:23:18)
● deleteMemo › 존재하지 않는 id이면 에러 발생
TypeError: deleteMemo is not a function
25 |
26 | test("존재하지 않는 id이면 에러 발생", async () => {
> 27 | await expect(deleteMemo(999)).rejects.toThrow("memo");
| ^
28 | });
29 | });
30 |
at Object.deleteMemo (__test__/memo/deleteMemoList.test.js:27:18)
PASS __test__/memo/readMemo.test.js
PASS __test__/memo/readMemoList.test.js
PASS __test__/memo/createMemo.test.js
Test Suites: 1 failed, 3 passed, 4 total
Tests: 6 failed, 37 passed, 43 total
Snapshots: 0 total
Time: 0.606 s, estimated 1 s
Ran all test suites.const mockMemos = [
{
id: 1,
title: "TDD 메모 작성",
period: {
startDate: "2026-03-06",
endDate: "2026-03-10",
},
content: "첫 번째 메모",
priority: 3,
isSuccess: false,
},
{
id: 2,
title: "두 번째 메모",
period: {
startDate: "2026-03-07",
endDate: "2026-03-12",
},
content: "두 번째 내용",
priority: 2,
isSuccess: true,
},
{
id: 3,
title: "세 번째 메모",
period: {
startDate: "2026-03-08",
endDate: "2026-03-15",
},
content: "세 번째 내용",
priority: 3,
isSuccess: true,
},
{
id: 4,
title: "네 번째 메모",
period: {
startDate: "2026-03-09",
endDate: "2026-03-18",
},
content: "네 번째 내용",
priority: 1,
isSuccess: false,
},
];
async function deleteMemo(id) {
if (typeof id !== "number" || id <= 0) {
throw new Error("id");
}
const index = mockMemos.findIndex((item) => item.id === id);
if (index === -1) {
throw new Error("memo is not find");
}
mockMemos.splice(index, 1);
return true;
}
module.exports = { deleteMemo };
hongseongchae@hongseongchaeui-MacBookPro tdd_study % npm test
> tdd_study@1.0.0 test
> jest
PASS __test__/memo/deleteMemo.test.js
PASS __test__/memo/createMemo.test.js
PASS __test__/memo/readMemo.test.js
PASS __test__/memo/readMemoList.test.js
Test Suites: 4 passed, 4 total
Tests: 43 passed, 43 total
Snapshots: 0 total
Time: 0.498 s, estimated 1 s
Ran all test suites.const mockMemos = [
{
id: 1,
title: "TDD 메모 작성",
period: {
startDate: "2026-03-06",
endDate: "2026-03-10",
},
content: "첫 번째 메모",
priority: 3,
isSuccess: false,
},
{
id: 2,
title: "두 번째 메모",
period: {
startDate: "2026-03-07",
endDate: "2026-03-12",
},
content: "두 번째 내용",
priority: 2,
isSuccess: true,
},
{
id: 3,
title: "세 번째 메모",
period: {
startDate: "2026-03-08",
endDate: "2026-03-15",
},
content: "세 번째 내용",
priority: 3,
isSuccess: true,
},
{
id: 4,
title: "네 번째 메모",
period: {
startDate: "2026-03-09",
endDate: "2026-03-18",
},
content: "네 번째 내용",
priority: 1,
isSuccess: false,
},
];
function validateId(id) {
if (typeof id !== "number" || id <= 0) {
throw new Error("id");
}
}
async function deleteMemo(id) {
validateId(id);
const index = mockMemos.findIndex((item) => item.id === id);
if (index === -1) {
throw new Error("memo is not find");
}
mockMemos.splice(index, 1);
return true;
}
module.exports = { deleteMemo };
hongseongchae@hongseongchaeui-MacBookPro tdd_study % npm test
> tdd_study@1.0.0 test
> jest
PASS __test__/memo/deleteMemo.test.js
PASS __test__/memo/createMemo.test.js
PASS __test__/memo/readMemoList.test.js
PASS __test__/memo/readMemo.test.js
Test Suites: 4 passed, 4 total
Tests: 43 passed, 43 total
Snapshots: 0 total
Time: 0.556 s, estimated 1 s
Ran all test suites.