Files
Gnuboard7/templates/_bundled/sirsoft-admin_basic/src/test-setup.ts
T
2026-04-01 10:30:52 +09:00

111 lines
3.0 KiB
TypeScript

import '@testing-library/jest-dom';
import { expect, vi } from 'vitest';
/**
* 테스트용 번역 맵
* 컴포넌트에서 사용하는 번역 키에 대한 한글 번역
*/
const testTranslations: Record<string, string> = {
// 공통
'common.close': '닫기',
'common.close_modal': '모달 닫기',
'common.close_dialog': '대화상자 닫기',
'common.close_notification': '알림 닫기',
'common.confirm': '확인',
'common.cancel': '취소',
'common.save': '저장',
'common.delete': '삭제',
'common.edit': '편집',
'common.search': '검색',
'common.search_placeholder': '검색...',
'common.loading': '로딩 중...',
'common.first_page': '첫 페이지',
'common.last_page': '마지막 페이지',
'common.previous_page': '이전 페이지',
'common.prev_page': '이전 페이지',
'common.next_page': '다음 페이지',
'common.page': '페이지',
'common.page_n': '페이지 {{n}}',
'common.pagination': '페이지네이션',
'common.no_data': '데이터가 없습니다',
'common.notifications': '알림',
'common.no_notifications': '알림이 없습니다',
'common.profile_settings': '프로필 설정',
'common.logout': '로그아웃',
'common.reset': '초기화',
'common.filter': '필터',
// 상태
'common.status_active': '활성화',
'common.status_inactive': '비활성화',
'common.status_pending': '대기중',
'common.status_error': '오류',
// 템플릿
'template.preview': '미리보기',
// 토스트
'toast.close': '알림 닫기',
};
/**
* G7Core 전역 모킹
* 컴포넌트에서 window.G7Core를 사용하므로 테스트 환경에서 모킹 필요
*/
(window as any).G7Core = {
createChangeEvent: vi.fn((data: { checked?: boolean; name?: string; value?: any }) => ({
target: {
checked: data.checked ?? false,
name: data.name ?? '',
value: data.value ?? (data.checked ? 'on' : 'off'),
type: 'checkbox',
},
currentTarget: {
checked: data.checked ?? false,
name: data.name ?? '',
value: data.value ?? (data.checked ? 'on' : 'off'),
type: 'checkbox',
},
preventDefault: vi.fn(),
stopPropagation: vi.fn(),
})),
state: {
get: vi.fn(),
set: vi.fn(),
update: vi.fn(),
subscribe: vi.fn(() => vi.fn()),
},
toast: {
success: vi.fn(),
error: vi.fn(),
warning: vi.fn(),
info: vi.fn(),
},
modal: {
open: vi.fn(),
close: vi.fn(),
},
events: {
emit: vi.fn(),
on: vi.fn(() => vi.fn()),
off: vi.fn(),
},
t: (key: string, _params?: Record<string, string | number>) => {
// 번역 맵에서 찾거나, 키 자체를 반환
return testTranslations[key] ?? key;
},
};
/**
* vitest-axe 동적 import 및 타입 호환성 처리
*/
const setupAxeMatchers = async (): Promise<void> => {
try {
const axeMatchers = await import('vitest-axe');
if ('toHaveNoViolations' in axeMatchers) {
expect.extend(axeMatchers as any);
}
} catch (error) {
console.warn('vitest-axe를 로드할 수 없습니다:', error);
}
};
setupAxeMatchers();