You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Jeśli projekt wykorzystuje bibliotekę `jest`, to nie wiele wystarczy, aby dodać testy sprawdzające zgodność z WCAG.
15
14
16
-
`jest-axe` to biblioteka, która umożliwia testowanie dostępności w testach jednostkowych w środowisku `jest`. Pozwala sprawdzić, czy komponenty napisane w `React`, `Angular` czy innych frameworkach spełniają wytyczne WCAG.
17
15
18
-
Przykład dla Angular:
19
-
- W pliku `test-setup.ts` należy zaimportować `jest-axe/extend-expect`
20
-
- Poniższy przykład obrazuje test dla komponentu `SomeComponent`:
16
+
Jeśli projekt wykorzystuje bibliotekę Jest, dodanie testów sprawdzających zgodność komponentów z WCAG jest proste i nie
17
+
wymaga dużego nakładu pracy.
18
+
19
+
20
+
# Czym jest jest-axe?
21
+
Jest-axe to narzędzie do automatycznego testowania dostępności, oparte na silniku axe-core. Działa podobnie jak lintery
22
+
kodu (np. eslint czy stylelint), czyli wykrywa typowe problemy, ale nie gwarantuje pełnej zgodności z wymaganiami
23
+
dostępności.
24
+
Integruje się z biblioteką Jest i pozwala analizować HTML komponentów pod kątem błędów dostępności, takich jak:
25
+
- brakujące atrybuty alt w obrazkach,
26
+
- nieprawidłowe role ARIA,
27
+
- nagłówki bez odpowiedniej hierarchii,
28
+
29
+
30
+
Dodaje do testów matcher `toHaveNoViolations`, który umożliwia prostą walidację wyników analizy.
31
+
32
+
<br/><br/>
33
+
***Uwaga!***
34
+
Jest-axe nie zastępuje ręcznego audytu dostępności. Automatyczne testy są tylko wsparciem i nie wychwycą wszystkich
35
+
problemów. Pełną ocenę powinny przeprowadzać osoby posiadające wiedzę w tym zakresie.
36
+
37
+
# Co jest-axe może przeoczyć?
38
+
Ważnym jest, aby mieć świadomość ograniczeń tego narzędzia. Jest-axe może nie wykryć m.in.:
39
+
40
+
- problemów z kontrastem,
41
+
- pełnej oceny struktury semantycznej,
42
+
- niektórych problemów z interaktywnymi elementami,
43
+
- problemów z nawigacją klawiaturową,
44
+
- problemów kontekstowych
45
+
46
+
# Integracja z Angular
47
+
48
+
Do projektu zawierajacego Jest należy zainstalować Jest-axe
49
+
50
+
## Krok 1: Instalacja
51
+
52
+
```bash
53
+
npm install --save-dev jest-axe @types/jest-axe
54
+
```
55
+
56
+
## Krok 2: Konfiguracja
57
+
58
+
Do pliku z konfiguracją testów np. `test-setup.ts`, należy dodać import
59
+
60
+
```typescript
61
+
import'jest-axe/extend-expect';
62
+
```
63
+
64
+
## Krok 3: Podstawowy test dostępności komponentu
65
+
66
+
W pliku `test-setup.ts` należy zaimportować `jest-axe/extend-expect`
67
+
68
+
# Testy
69
+
70
+
Kiedy wszystko zostało już skonfigurowanie, nie pozostaje nic innego jak użycie narzędzia w testach.
71
+
W pliku z testami należy dodać import `import { axe } from 'jest-axe';`. Następnie dzięki `axe(fixture.nativeElement)`,
72
+
uruchomiona zostanie analiza dostępności dla wygenerowanego HTMLa komponentu.
73
+
Wynik analizy musi zostać sprawdzony przy użyciu metody `toHaveNoViolations`, w następujący sposób:
74
+
`expect(results).toHaveNoViolations()`.
75
+
76
+
## Przypadki testowe
77
+
78
+
Dla przypadkach testowych zostały utworzone dwa komponent. Dla pierwszego HTML, nie spełni audytu, a dla drugiego
79
+
spełni.
80
+
81
+
### Pierwszy scenariusz
82
+
83
+
Komponent posiada następujący kod HTML:
84
+
85
+
```html
86
+
<divclass="container">
87
+
<!-- Błąd: Nieprawidłowa kolejność nagłówków (h4 po h2 bez h3) -->
88
+
<h2>Główny nagłówek</h2>
89
+
<h4>Polecane akcesoria</h4>
90
+
91
+
<!-- Błąd: Obraz bez atrybutu alt -->
92
+
<imgsrc="product.jpg"class="banner-image">
93
+
94
+
<!-- Błąd: Link bez treści (pusty link) -->
95
+
<ahref="/home"class="home-link"></a>
96
+
97
+
<!-- Błąd: Element select bez etykiety -->
98
+
<select>
99
+
<optionvalue="">Wybierz temat...</option>
100
+
<optionvalue="question">Pytanie</option>
101
+
<optionvalue="complaint">Reklamacja</option>
102
+
</select>
103
+
104
+
<!-- Błąd: Atrybut ARIA z nieprawidłową wartością -->
-`axe(fixture.nativeElement)` - uruchamia analizę dostępności dla wygenerowanego HTMLa komponentu
48
-
-`expect(results).toHaveNoViolations();` - sprawdza, czy nie znaleziono żadnych błędów związanych z dostępnością (czy np. brakujące atrybutu alt dla obrazków)
140
+
Po uruchomieniu testu, zwrócony został następujące komunikaty błędów
141
+
142
+
```
143
+
expect(received).toHaveNoViolations(expected)
144
+
Expected the HTML found at $('div[aria-hidden="falsy"]') to have no violations:
145
+
<div aria-hidden="falsy">Ukryta treść</div>
146
+
147
+
Received:
148
+
"ARIA attributes must conform to valid values (aria-valid-attr-value)"
Wywołanie testu jest takie samo jak w poprzednim przykładzie, a sam test będzie pozytywny.
223
+
224
+
225
+
# Podsumowanie
226
+
Jest-axe łatwo integruje się z Jest, pozwala wykrywać proste błędy dostępności w HTML i działa z popularnymi
227
+
frameworkami (Angular, React, Vue).
228
+
Nie wspiera on jednak pełnego wsparcia audytorskiego pod kątem dostępności.
229
+
49
230
50
-
Dzięki kilku linijkom kodu przeprowadzenie audytu całego systemu projektowego pod kątem problemów z dostępnością staje się wykonalne! Warto pamiętać, że testy automatyczne wykryją tylko część problemów. **Nie gwarantują** one, że komponent jest w pełni dostępny.
231
+
Dlatego jest-axe powinien być traktowany jako wsparcie, a nie zastępstwo dla ręcznych testów dostępności i audytów z
0 commit comments