Files
biggus-dickus/web/src/i18n/i18n.test.tsx
T

43 lines
1.3 KiB
TypeScript

import { expect, test, beforeEach, afterEach } from "vitest";
import { render, screen, act } from "@testing-library/react";
import { useTranslation } from "react-i18next";
import i18n from "./index";
import { useLocale } from "./use-locale";
beforeEach(async () => {
await i18n.changeLanguage("en");
});
// Leave the shared i18n singleton on English so language-dependent assertions in
// other test files are never affected by this file's runtime switch to Swedish.
afterEach(async () => {
await i18n.changeLanguage("en");
});
function Probe() {
const { t } = useTranslation();
const { setLocale } = useLocale();
return (
<div>
<span data-testid="title">{t("objects.title")}</span>
<button onClick={() => setLocale("sv")}>sv</button>
</div>
);
}
test("switches language at runtime", async () => {
render(<Probe />);
expect(screen.getByTestId("title")).toHaveTextContent("Objects");
await act(async () => {
screen.getByRole("button", { name: "sv" }).click();
});
expect(screen.getByTestId("title")).toHaveTextContent("Föremål");
});
test("syncs document.documentElement.lang on language change", async () => {
await i18n.changeLanguage("sv");
expect(document.documentElement.lang).toBe("sv");
await i18n.changeLanguage("en");
expect(document.documentElement.lang).toBe("en");
});