Bladeren bron

test(web): Select

Paul Armstrong 4 jaren geleden
bovenliggende
commit
a7e5b9978f
1 gewijzigde bestanden met toevoegingen van 34 en 0 verwijderingen
  1. 34 0
      web/src/components/__tests__/Select.test.jsx

+ 34 - 0
web/src/components/__tests__/Select.test.jsx

@@ -0,0 +1,34 @@
+import { h } from 'preact';
+import Select from '../Select';
+import { fireEvent, render, screen } from '@testing-library/preact';
+
+describe('Select', () => {
+  test('on focus, shows a menu', async () => {
+    const handleChange = jest.fn();
+    render(<Select label="Tacos" onChange={handleChange} options={['tacos', 'burritos']} />);
+
+    expect(screen.queryByRole('listbox')).not.toBeInTheDocument();
+    fireEvent.click(screen.getByRole('textbox'));
+    expect(screen.queryByRole('listbox')).toBeInTheDocument();
+    expect(screen.queryByRole('option', { name: 'tacos' })).toBeInTheDocument();
+    expect(screen.queryByRole('option', { name: 'burritos' })).toBeInTheDocument();
+
+    fireEvent.click(screen.queryByRole('option', { name: 'burritos' }));
+    expect(handleChange).toHaveBeenCalledWith('burritos', 'burritos');
+  });
+
+  test('allows keyboard navigation', async () => {
+    const handleChange = jest.fn();
+    render(<Select label="Tacos" onChange={handleChange} options={['tacos', 'burritos']} />);
+
+    expect(screen.queryByRole('listbox')).not.toBeInTheDocument();
+    const input = screen.getByRole('textbox');
+    fireEvent.focus(input);
+    fireEvent.keyDown(input, { key: 'Enter', code: 'Enter' });
+    expect(screen.queryByRole('listbox')).toBeInTheDocument();
+
+    fireEvent.keyDown(input, { key: 'ArrowDown', code: 'ArrowDown' });
+    fireEvent.keyDown(input, { key: 'Enter', code: 'Enter' });
+    expect(handleChange).toHaveBeenCalledWith('burritos', 'burritos');
+  });
+});