Qualité Front-End
Tous les exemples peuvent être retrouvés dans ce repo ici
De quoi parle-t-on ?
Ici, avec “qualité”, je sous-entends, bon fonctionnement et maintenabilité du livrable.
- Forcer un certain format dans son CSS.
- Refactor du CSS en étant sûr et certain de ne pas avoir changé l’interface d’une autre page ou d’un état différent de la même page.
- S’assurer qu’un usecase soit toujours fonctionnel après trois années de développement.
- Tester l’accessibilité de ses interfaces.
Stylelint
Avec Stylelint on a la
possibilité de forcer la manière d’écrire son CSS.
Par exemple interdire les px
ou alors forcer la notations rgb
pour les couleurs.
Résultat du linting du css du repo d’exemple.
> npx stylelint "**/*.css"
src/style.css
6:10 ✖ Expected "rgba" to be "rgb" color-function-alias-notation
6:10 ✖ Expected modern color-function notation color-function-notation
6:30 ✖ Expected "0.87" to be "87%" alpha-value-notation
9:3 ✖ Unexpected empty line before declaration declaration-empty-line-before
10:19 ✖ Expected "optimizeLegibility" to be "optimizelegibility" value-keyword-case
20:1 ✖ Expected empty line before rule rule-empty-line-before
50:1 ✖ Expected empty line before rule rule-empty-line-before
53:1 ✖ Expected empty line before rule rule-empty-line-before
76:1 ✖ Expected empty line before rule rule-empty-line-before
79:1 ✖ Expected empty line before rule rule-empty-line-before
87:23 ✖ Expected "#ffffff" to be "#fff" color-hex-length
89:3 ✖ Expected empty line before rule rule-empty-line-before
92:3 ✖ Expected empty line before rule
Playwright
Playwright permet d’écrire des tests dits “end to end”, grâce à cela, nous pouvons donc tester un usecase en simulant des actions utilisateurs sur notre site.
Example d’un test qui simule un click et vérifie le contenu de la page.
test('should be 1', async ({page}) => {
await page.goto('/');
await page.getByRole('button', {name: 'ADD'}).click();
await expect(page.locator('#counter')).toContainText('count is 1');
});
On peut également créer des tests d’interface très simples en utilisant des snapshots.
Au premier lancement du test, Playwright va sauvegarder un PNG pour chaque
projects
définie dans la config, puis va utiliser ces snapshots pour les prochains
lancements de ce test.
Ce test permet de s’assurer que l’interface reste inchangée.
test('style test', async ({page}) => {
await page.goto('/');
await expect(page).toHaveScreenshot({maxDiffPixels: 0});
});
On peut également utiliser la librairy axe pour écrire des tests d’accessibilité.
test('should not have any automatically detectable accessibility issues', async ({ page }) => {
await page.goto('/');
const accessibilityScanResults = await new AxeBuilder({ page }).analyze();
expect(accessibilityScanResults.violations).toEqual([]);
});