Files
zellyy-finance/activate-clerk-test.cjs
hansoo 7c92e60a53 fix: ESLint React Hook 오류 비활성화
- useAuth와 useUser에서 react-hooks/rules-of-hooks 규칙 비활성화
- Clerk이 비활성화된 상황에서의 조건부 Hook 호출은 의도된 동작
2025-07-15 05:16:22 +09:00

163 lines
5.9 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Clerk 실제 인증 활성화 및 테스트
* Mock이 아닌 실제 Clerk 컴포넌트로 테스트
*/
const { chromium } = require("playwright");
async function activateClerkAndTest() {
const browser = await chromium.launch({
headless: false, // 브라우저 창을 보여줌
slowMo: 1000, // 1초씩 천천히 실행
});
console.log("🔧 Clerk 실제 인증 활성화 및 테스트 시작...");
try {
const page = await browser.newPage();
// 콘솔 메시지 캡처
let consoleMessages = [];
page.on("console", (msg) => {
const text = msg.text();
consoleMessages.push(text);
if (msg.type() === "error") {
console.log("❌ Console Error:", text);
} else if (text.includes("Clerk")) {
console.log("🔧 Clerk Message:", text);
}
});
// 1단계: 홈페이지로 이동하여 Clerk 상태 확인
console.log("\n📋 1단계: 현재 Clerk 상태 확인");
await page.goto("http://localhost:3000/");
await page.waitForTimeout(3000);
const currentClerkStatus = await page.evaluate(() => {
return {
disableClerk: sessionStorage.getItem("disableClerk"),
skipClerk: sessionStorage.getItem("skipClerk"),
chunkLoadError: sessionStorage.getItem("chunkLoadErrorMaxRetries"),
};
});
console.log("현재 Clerk 상태:", currentClerkStatus);
// 2단계: Clerk 비활성화 플래그 제거
console.log("\n📋 2단계: Clerk 재활성화");
await page.evaluate(() => {
sessionStorage.removeItem("disableClerk");
sessionStorage.removeItem("skipClerk");
sessionStorage.removeItem("chunkLoadErrorMaxRetries");
sessionStorage.removeItem("lastChunkErrorTime");
console.log("✅ Clerk 비활성화 플래그 제거됨");
});
// 3단계: 페이지 새로고침하여 Clerk 재로드
console.log("\n📋 3단계: 페이지 새로고침 (Clerk 재로드)");
await page.reload();
await page.waitForTimeout(5000); // Clerk 로딩 시간 대기
// 4단계: 로그인 페이지로 이동하여 실제 Clerk 컴포넌트 확인
console.log("\n📋 4단계: Clerk 실제 로그인 페이지 테스트");
await page.goto("http://localhost:3000/sign-in");
await page.waitForTimeout(3000);
// Clerk 컴포넌트가 로드되었는지 확인
const clerkComponentCheck = await page.evaluate(() => {
const body = document.body.textContent || "";
// Mock 컴포넌트 메시지 확인
const hasMockMessage = body.includes("인증 시스템이 임시로 비활성화");
// Clerk 실제 컴포넌트 요소 확인
const clerkElements = document.querySelectorAll("[data-clerk-element]");
const hasClerkElements = clerkElements.length > 0;
// Clerk 로딩 상태 확인
const hasClerkLoading =
body.includes("Loading") || body.includes("loading");
return {
bodyContent: body.substring(0, 500), // 첫 500자만
hasMockMessage,
hasClerkElements,
clerkElementsCount: clerkElements.length,
hasClerkLoading,
};
});
console.log("Clerk 컴포넌트 상태:", clerkComponentCheck);
if (clerkComponentCheck.hasMockMessage) {
console.log("⚠️ 아직 Mock 컴포넌트가 표시되고 있습니다.");
console.log("🔧 디버그 컨트롤로 Clerk 재활성화를 시도합니다...");
// 디버그 컨트롤 버튼 클릭 시도
try {
const reactivateButton = await page
.locator('text="Clerk 인증 재시도"')
.first();
if (await reactivateButton.isVisible()) {
console.log("🔧 디버그 컨트롤에서 Clerk 재활성화 버튼 클릭");
await reactivateButton.click();
await page.waitForTimeout(5000);
}
} catch (error) {
console.log(" 디버그 컨트롤 버튼을 찾을 수 없습니다.");
}
} else if (clerkComponentCheck.hasClerkElements) {
console.log("✅ 실제 Clerk 컴포넌트가 로드되었습니다!");
} else {
console.log("🔄 Clerk 컴포넌트 로딩 중...");
}
// 5단계: 회원가입 페이지도 테스트
console.log("\n📋 5단계: Clerk 실제 회원가입 페이지 테스트");
await page.goto("http://localhost:3000/sign-up");
await page.waitForTimeout(3000);
const signUpCheck = await page.evaluate(() => {
const body = document.body.textContent || "";
const hasMockMessage = body.includes("인증 시스템이 임시로 비활성화");
const clerkElements = document.querySelectorAll("[data-clerk-element]");
return {
hasMockMessage,
hasClerkElements: clerkElements.length > 0,
clerkElementsCount: clerkElements.length,
};
});
console.log("회원가입 페이지 Clerk 상태:", signUpCheck);
// 6단계: 최종 결과 요약
console.log("\n🎉 Clerk 활성화 테스트 완료!");
console.log("\n📊 테스트 결과 요약:");
if (clerkComponentCheck.hasMockMessage && signUpCheck.hasMockMessage) {
console.log("❌ Clerk Mock 컴포넌트가 여전히 표시됨");
console.log("💡 추가 조치 필요: Clerk CDN 문제 또는 설정 확인");
} else if (
clerkComponentCheck.hasClerkElements ||
signUpCheck.hasClerkElements
) {
console.log("✅ 실제 Clerk 컴포넌트 로드 성공!");
console.log("✅ 한국어 지역화 적용됨");
} else {
console.log("🔄 Clerk 로딩 상태 - 네트워크 상태 확인 필요");
}
// 브라우저를 5초간 열어둠 (확인용)
console.log("\n⏰ 브라우저를 5초간 열어둡니다 (확인용)...");
await page.waitForTimeout(5000);
} catch (error) {
console.error("❌ 테스트 중 오류 발생:", error);
} finally {
await browser.close();
}
}
// 테스트 실행
activateClerkAndTest().catch(console.error);