Add test for the language switcher
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
import { render, screen } from "@testing-library/react";
|
||||
import userEvent from "@testing-library/user-event";
|
||||
import { Language } from "../../lib/types";
|
||||
import LanguageSwitcher from "./LanguageSwitcher";
|
||||
|
||||
const renderSwitcher = (onChange = () => {}, defaultLang = Language.ENG) => {
|
||||
render(<LanguageSwitcher defaultLang={defaultLang} onChange={onChange} />);
|
||||
};
|
||||
|
||||
test("renders LanguageSwitcher component", async () => {
|
||||
renderSwitcher();
|
||||
const switcher = screen.getByTestId("language-switcher") as HTMLSelectElement;
|
||||
|
||||
expect(switcher.value).toBe(Language.ENG);
|
||||
});
|
||||
|
||||
test("calls onChange handler when a new language is selected", async () => {
|
||||
const mockOnChange = jest.fn();
|
||||
renderSwitcher(mockOnChange);
|
||||
|
||||
const switcher = screen.getByTestId("language-switcher") as HTMLSelectElement;
|
||||
|
||||
await userEvent.selectOptions(switcher, Language.ESP);
|
||||
expect(mockOnChange).toHaveBeenCalledWith(Language.ESP);
|
||||
});
|
||||
|
||||
test("renders all language options correctly", () => {
|
||||
renderSwitcher();
|
||||
const options = screen.getAllByRole("option");
|
||||
const languageValues = Object.values(Language);
|
||||
|
||||
expect(options).toHaveLength(languageValues.length);
|
||||
languageValues.forEach((lang, index) => {
|
||||
expect(options[index]).toHaveValue(lang);
|
||||
expect(options[index]).toHaveTextContent(lang.toUpperCase());
|
||||
});
|
||||
});
|
||||
@@ -10,6 +10,7 @@ function LanguageSwitcher({
|
||||
}) {
|
||||
return (
|
||||
<select
|
||||
data-testid="language-switcher"
|
||||
defaultValue={defaultLang}
|
||||
onChange={(ev) => onChange(ev.currentTarget.value as Language)}
|
||||
className={styles.languageSwitcher}
|
||||
|
||||
Reference in New Issue
Block a user