Skip to content

Commit 1233394

Browse files
committed
Refactor unit tests not to use querySelector unless absolutely necessary
1 parent d69b2c2 commit 1233394

File tree

9 files changed

+434
-433
lines changed

9 files changed

+434
-433
lines changed

packages/react-time-picker/src/Divider.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,9 @@ type DividerProps = {
33
};
44

55
export default function Divider({ children }: DividerProps): React.ReactElement {
6-
return <span className="react-time-picker__inputGroup__divider">{children}</span>;
6+
return (
7+
<span className="react-time-picker__inputGroup__divider" data-testid="divider">
8+
{children}
9+
</span>
10+
);
711
}

packages/react-time-picker/src/TimeInput.spec.tsx

Lines changed: 112 additions & 121 deletions
Large diffs are not rendered by default.

packages/react-time-picker/src/TimeInput/AmPm.spec.tsx

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { describe, expect, it } from 'vitest';
2+
import { page } from 'vitest/browser';
23
import { render } from 'vitest-browser-react';
34

45
import AmPm from './AmPm.js';
@@ -12,39 +13,39 @@ describe('AmPm', () => {
1213
} satisfies React.ComponentProps<typeof AmPm>;
1314

1415
it('renders a select', async () => {
15-
const { container } = await render(<AmPm {...defaultProps} />);
16+
await render(<AmPm {...defaultProps} />);
1617

17-
const select = container.querySelector('select') as HTMLSelectElement;
18+
const select = page.getByRole('combobox');
1819
expect(select).toBeInTheDocument();
1920

20-
const options = select.querySelectorAll('option');
21+
const options = select.getByRole('option');
2122
expect(options).toHaveLength(3);
2223
});
2324

2425
it('applies given aria-label properly', async () => {
2526
const amPmAriaLabel = 'Select AM/PM';
2627

27-
const { container } = await render(<AmPm {...defaultProps} ariaLabel={amPmAriaLabel} />);
28+
await render(<AmPm {...defaultProps} ariaLabel={amPmAriaLabel} />);
2829

29-
const select = container.querySelector('select');
30+
const select = page.getByRole('combobox');
3031

3132
expect(select).toHaveAttribute('aria-label', amPmAriaLabel);
3233
});
3334

3435
it('has proper name defined', async () => {
35-
const { container } = await render(<AmPm {...defaultProps} />);
36+
await render(<AmPm {...defaultProps} />);
3637

37-
const select = container.querySelector('select');
38+
const select = page.getByRole('combobox');
3839

3940
expect(select).toHaveAttribute('name', 'amPm');
4041
});
4142

4243
it('has proper className defined', async () => {
4344
const className = 'react-time-picker';
4445

45-
const { container } = await render(<AmPm {...defaultProps} className={className} />);
46+
await render(<AmPm {...defaultProps} className={className} />);
4647

47-
const select = container.querySelector('select');
48+
const select = page.getByRole('combobox');
4849

4950
expect(select).toHaveClass('react-time-picker__input');
5051
expect(select).toHaveClass('react-time-picker__amPm');
@@ -53,72 +54,72 @@ describe('AmPm', () => {
5354
it('displays given value properly', async () => {
5455
const value = 'pm';
5556

56-
const { container } = await render(<AmPm {...defaultProps} value={value} />);
57+
await render(<AmPm {...defaultProps} value={value} />);
5758

58-
const select = container.querySelector('select');
59+
const select = page.getByRole('combobox');
5960

6061
expect(select).toHaveValue(value);
6162
});
6263

6364
it('does not disable select by default', async () => {
64-
const { container } = await render(<AmPm {...defaultProps} />);
65+
await render(<AmPm {...defaultProps} />);
6566

66-
const select = container.querySelector('select');
67+
const select = page.getByRole('combobox');
6768

6869
expect(select).not.toBeDisabled();
6970
});
7071

7172
it('disables input given disabled flag', async () => {
72-
const { container } = await render(<AmPm {...defaultProps} disabled />);
73+
await render(<AmPm {...defaultProps} disabled />);
7374

74-
const select = container.querySelector('select');
75+
const select = page.getByRole('combobox');
7576

7677
expect(select).toBeDisabled();
7778
});
7879

7980
it('should not disable anything by default', async () => {
80-
const { container } = await render(<AmPm {...defaultProps} />);
81+
await render(<AmPm {...defaultProps} />);
8182

82-
const select = container.querySelector('select') as HTMLSelectElement;
83-
const optionAm = select.querySelector('option[value="am"]');
84-
const optionPm = select.querySelector('option[value="pm"]');
83+
const select = page.getByRole('combobox');
84+
const optionAm = select.element().querySelector('option[value="am"]');
85+
const optionPm = select.element().querySelector('option[value="pm"]');
8586

8687
expect(optionAm).not.toBeDisabled();
8788
expect(optionPm).not.toBeDisabled();
8889
});
8990

9091
it('should disable "pm" given maxTime before 12:00 pm', async () => {
91-
const { container } = await render(<AmPm {...defaultProps} maxTime="11:59" />);
92+
await render(<AmPm {...defaultProps} maxTime="11:59" />);
9293

93-
const select = container.querySelector('select') as HTMLSelectElement;
94-
const optionPm = select.querySelector('option[value="pm"]');
94+
const select = page.getByRole('combobox');
95+
const optionPm = select.element().querySelector('option[value="pm"]');
9596

9697
expect(optionPm).toBeDisabled();
9798
});
9899

99100
it('should not disable "pm" given maxTime after or equal to 12:00 pm', async () => {
100-
const { container } = await render(<AmPm {...defaultProps} maxTime="12:00" />);
101+
await render(<AmPm {...defaultProps} maxTime="12:00" />);
101102

102-
const select = container.querySelector('select') as HTMLSelectElement;
103-
const optionPm = select.querySelector('option[value="pm"]');
103+
const select = page.getByRole('combobox');
104+
const optionPm = select.element().querySelector('option[value="pm"]');
104105

105106
expect(optionPm).not.toBeDisabled();
106107
});
107108

108109
it('should disable "am" given minTime after or equal to 12:00 pm', async () => {
109-
const { container } = await render(<AmPm {...defaultProps} minTime="12:00" />);
110+
await render(<AmPm {...defaultProps} minTime="12:00" />);
110111

111-
const select = container.querySelector('select') as HTMLSelectElement;
112-
const optionAm = select.querySelector('option[value="am"]');
112+
const select = page.getByRole('combobox');
113+
const optionAm = select.element().querySelector('option[value="am"]');
113114

114115
expect(optionAm).toBeDisabled();
115116
});
116117

117118
it('should not disable "am" given minTime before 12:00 pm', async () => {
118-
const { container } = await render(<AmPm {...defaultProps} minTime="11:59" />);
119+
await render(<AmPm {...defaultProps} minTime="11:59" />);
119120

120-
const select = container.querySelector('select') as HTMLSelectElement;
121-
const optionAm = select.querySelector('option[value="pm"]');
121+
const select = page.getByRole('combobox');
122+
const optionAm = select.element().querySelector('option[value="pm"]');
122123

123124
expect(optionAm).not.toBeDisabled();
124125
});

0 commit comments

Comments
 (0)