Documentation Frappe Framework

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.

2 min de lectureMis à jour le Source : docs.frappe.io

É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 :

terminal
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.

  1. 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. -x exclut, -n inclut. Détail : nyc instrument.
  2. bench --site test_site run-ui-tests frappe --with-coverage.
  3. 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êteCible 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.