Skip to content

Commit 5d931eb

Browse files
committed
test: UserInfoProvider 단위테스트 추가
1 parent 4ad2568 commit 5d931eb

1 file changed

Lines changed: 56 additions & 0 deletions

File tree

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import { act, renderHook } from '@testing-library/react';
2+
import { describe, expect, it, vi } from 'vitest';
3+
import UserIdProvider, { useUserId } from './UserInfoProvider';
4+
5+
vi.mock('window', () => {
6+
const store = new Map();
7+
return {
8+
localStorage: {
9+
getItem: vi.fn((key) => store.get(key)),
10+
setItem: vi.fn((key, value) => store.set(key, value)),
11+
removeItem: vi.fn((key) => store.delete(key)),
12+
},
13+
};
14+
});
15+
16+
const MOCK_USERID = 4;
17+
18+
describe('UserInfoProvider 테스트', () => {
19+
it('useUserId hook은 UserInfoProvider 외부에서 사용하면 에러를 던진다.', () => {
20+
expect(() => renderHook(() => useUserId())).toThrowError();
21+
});
22+
23+
it('초기 상태에서는 userId가 null이다.', () => {
24+
const { result } = renderHook(useUserId, {
25+
wrapper: ({ children }) => <UserIdProvider>{children}</UserIdProvider>,
26+
});
27+
28+
expect(result.current.userId).toBe(null);
29+
});
30+
31+
it('초기 마운트 시 로컬스토리지에서 userId를 불러온다.', () => {
32+
// Pre-populate localStorage
33+
window.localStorage.setItem('userId', MOCK_USERID.toString());
34+
35+
const { result } = renderHook(useUserId, {
36+
wrapper: ({ children }) => <UserIdProvider>{children}</UserIdProvider>,
37+
});
38+
39+
expect(result.current.userId).toBe(MOCK_USERID);
40+
expect(window.localStorage.getItem).toHaveBeenCalledWith('userId');
41+
});
42+
43+
it('setUserId를 호출하면 userId 상태가 업데이트된다.', () => {
44+
const { result } = renderHook(useUserId, {
45+
wrapper: ({ children }) => <UserIdProvider>{children}</UserIdProvider>,
46+
});
47+
48+
expect(result.current.userId).toBe(null);
49+
50+
act(() => {
51+
result.current.setUserId(MOCK_USERID);
52+
});
53+
54+
expect(result.current.userId).toBe(MOCK_USERID);
55+
});
56+
});

0 commit comments

Comments
 (0)