javascript / intermediate
Snippet
Testen barrierefreier Formularvalidierungszustände mit Testing Library
Formularvalidierung sollte sowohl visuelle als auch semantische Statusänderungen widerspiegeln. Tests mit der React Testing Library ermöglichen das Abfragen von Elementen über barrierefreie Rollen und Attribute wie `aria-invalid` und `role="alert"`.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import React, { useState } from 'react';import { render, screen, fireEvent } from '@testing-library/react';function EmailForm({ onSubmit }) {const [email, setEmail] = useState('');const [error, setError] = useState('');const handleSubmit = (e) => {e.preventDefault();if (!email.includes('@')) {setError('Please provide a valid email address.');return;}setError('');onSubmit(email);};return (<form onSubmit={handleSubmit} noValidate><label htmlFor="email-input">Email Address</label><inputid="email-input"type="email"value={email}onChange={(e) => setEmail(e.target.value)}aria-invalid={Boolean(error)}aria-describedby={error ? 'email-error' : undefined}/>{error && <span id="email-error" role="alert">{error}</span>}<button type="submit">Subscribe</button></form>);}test('displays accessible error message on invalid email submission', () => {render(<EmailForm onSubmit={jest.fn()} />);const input = screen.getByLabelText(/email address/i);const submitButton = screen.getByRole('button', { name: /subscribe/i });fireEvent.change(input, { target: { value: 'invalid-email' } });fireEvent.click(submitButton);expect(input).toHaveAttribute('aria-invalid', 'true');const alert = screen.getByRole('alert');expect(alert).toHaveTextContent(/valid email address/i);});
react
Erklärung
1
aria-invalid={Boolean(error)}
Macht den Validierungsstatus für assistierende Technologien über den Accessibility-Tree zugänglich.
2
const input = screen.getByLabelText(/email address/i);
Findet das Formularfeld über die Verknüpfung mit dem zugehörigen Label-Element.
3
expect(input).toHaveAttribute('aria-invalid', 'true');
Prüft, ob die Komponente den Fehlerstatus korrekt über ARIA-Attribute mitteilt.