refactor(tests): use getByRole instead of getByText for interactive elements

- Refactor ~47 test cases across 7 test files to use getByRole
- Improve accessibility testing coverage following Testing Library best practices
- Make tests more robust against text changes (i18n, copy updates)
- Test elements as users (especially screen readers) interact with them
This commit is contained in:
lenhanphung
2025-10-16 15:00:58 +07:00
committed by Benoit TELLIER
parent 4c18bf3a52
commit b9905cbb7a
7 changed files with 52 additions and 46 deletions
+10 -8
View File
@@ -184,7 +184,7 @@ describe("Event Preview Display", () => {
return () => Promise.resolve(payload) as any;
});
fireEvent.click(screen.getByTestId("MoreVertIcon"));
fireEvent.click(screen.getByText("Delete event"));
fireEvent.click(screen.getByRole("menuitem", { name: /Delete event/i }));
await waitFor(() => {
expect(spy).toHaveBeenCalled();
@@ -545,7 +545,9 @@ describe("Event Preview Display", () => {
);
fireEvent.click(screen.getByTestId("MoreVertIcon"));
const emailButton = screen.getByText("Email attendees");
const emailButton = screen.getByRole("menuitem", {
name: /Email attendees/i,
});
expect(emailButton).toBeInTheDocument();
fireEvent.click(emailButton);
@@ -1041,7 +1043,7 @@ describe("Event Full Display", () => {
preloadedState
);
act(() => {
fireEvent.click(screen.getByText("Show More"));
fireEvent.click(screen.getByRole("button", { name: /Show More/i }));
});
await waitFor(() => {
@@ -1054,7 +1056,7 @@ describe("Event Full Display", () => {
// EventDisplay modal doesn't have Repeat checkbox, only RepeatEvent component
// which shows repetition settings when repetition data exists
// Since test event has no repetition data, RepeatEvent component won't show Repeat checkbox
fireEvent.click(screen.getByText("Show Less"));
fireEvent.click(screen.getByRole("button", { name: /Show Less/i }));
});
it("can edit title when user is organizer", () => {
@@ -1193,7 +1195,7 @@ describe("Event Full Display", () => {
const option = await screen.findByText("Calendar Two");
fireEvent.click(option);
fireEvent.click(screen.getByText("Save"));
fireEvent.click(screen.getByRole("button", { name: /Save/i }));
await waitFor(() => {
expect(spyPut).toHaveBeenCalled();
@@ -1277,7 +1279,7 @@ describe("Event Full Display", () => {
preloadedRecurrence
);
fireEvent.click(screen.getByText("Save"));
fireEvent.click(screen.getByRole("button", { name: /Save/i }));
await waitFor(() => {
expect(spyUpdateSeries).toHaveBeenCalled();
@@ -1383,7 +1385,7 @@ describe("Event Full Display", () => {
);
// Verify the timezone select shows Asia/Bangkok
fireEvent.click(screen.getByText("Show More"));
fireEvent.click(screen.getByRole("button", { name: /Show More/i }));
// The timezone select should have Asia/Bangkok selected
// Since the component uses formatLocalDateTime, the displayed time will be in local format
@@ -1442,7 +1444,7 @@ describe("Event Full Display", () => {
);
act(() => {
fireEvent.click(screen.getByText("Show More"));
fireEvent.click(screen.getByRole("button", { name: /Show More/i }));
});
expect(screen.getByText("Something went wrong")).toBeInTheDocument();