import { describe, it, expect, afterEach } from "vitest"; import { render, screen, fireEvent, cleanup } from "@testing-library/react"; import { LocaleProvider, useAppLocale, useLocaleActions } from "@/features/i18n/LocaleProvider"; // LocaleProvider / useAppLocale / useLocaleActions TDD // - initialLocale 로 전달된 로케일이 하위 컴포넌트에서 그대로 노출되는지 검증한다. // - useLocaleActions 로 setLocale 을 호출하면 하위 컴포넌트의 로케일이 변경되어야 한다. describe("LocaleProvider", () => { afterEach(() => { cleanup(); }); function LocaleConsumer() { const locale = useAppLocale(); return
{locale}
; } function LocaleSetterButton({ next }: { next: "en" | "ko" }) { const { setLocale } = useLocaleActions(); return ( ); } it("initialLocale 로 en 을 전달하면 하위 컴포넌트에서 en 로케일을 읽을 수 있어야 한다", () => { render( , ); const current = screen.getByTestId("current-locale"); expect(current.textContent).toBe("en"); }); it("setLocale 을 호출하면 하위 컴포넌트의 useAppLocale 결과가 업데이트되어야 한다", () => { render( , ); const current = screen.getByTestId("current-locale"); expect(current.textContent).toBe("en"); fireEvent.click(screen.getByText("set-ko")); expect(current.textContent).toBe("ko"); }); });