Frappe Framework
Tests d’interface (UI Testing)
Les fichiers vivent dans cypress/integration. Le mode headless et le parallèle sont des options. nyc instrument réécrit les sources avant la mesure.
Écrire
Cypress est un cadre Node.js, pas Selenium. Un test d’intégration est un fichier .js dans cypress/integration. Une autre présentation est dans Tests d’intégration UI.
L’exemple ToDo se connecte en Administrator / admin, ouvre /desk, visite /app/todo/new-todo-1, remplit description avec « this is a test todo » dans un Text Editor, vérifie que .page-title contient Not Saved, clique .primary-action, va sur /desk#List/ToDo, attend que le hash vaille /app/todo, et que .list-row contienne le texte.
Lancer
Cypress prend un navigateur Chromium déjà installé. Depuis frappe-bench :
bench --site [sitename] run-ui-tests [app]Le shell Electron Cypress s’ouvre. --headless n’ouvre pas ce shell. --parallel active le parallélisme Cypress.
Couverture
Les .js sont instrumentés avec Istanbul. Le plugin code-coverage fusionne les tests. L’instrumentation insère des compteurs. L’exemple foo montre, avant, un if nu, et après des appels cov_1m1jljnmzu.
npx nyc instrument -x 'frappe/public/dist/**' -x 'frappe/public/js/lib/**' -x '**/*.bundle.js' --compact=false --in-place frappe. Cela remplace le code du dossier frappe.-xexclut,-ninclut. Détail : nyc instrument.bench --site test_site run-ui-tests frappe --with-coverage.npx nyc report --reporter=text. D’autres formats : reporters Istanbul.
Testing Library
Les requêtes Testing Library cherchent comme un utilisateur, sans coller aux détails d’implémentation. Le tableau publié a perdu la plupart des noms de balises. Ce qui reste lisible :
| Requête | Cible encore écrite |
|---|---|
findByRole('button', {name: 'Save'}) | nom accessible Save |
findByRole('checkbox'), findByRole('textbox') | balises absentes |
findByRole('searchbox') | input de type search |
findByRole('listbox') | select, plus une balise manquante |
findByLabelText('Optimize') | élément du libellé Optimize |
findByPlaceholderText('Name') | placeholder Name |
findByText('example.json') | textContent example.json |
findByDisplayValue('Option 1') | option sélectionnée, ou input / textarea de même valeur. La balise publiée est un </select> fermant. |
findByTitle('Open Link') | title Open Link |
ByAltText et ByTestId sont nommés, sans tableau. Les rôles HTML par défaut : W3C.
Point d’attention
nyc instrument --in-place réécrit les sources. Le test d’exemple attend le hash /app/todo après une visite de /desk#List/ToDo.
