js: configure vitest + happy-dom test environment (#81105) #666
Open
csechet
wants to merge 1 commits from
wip/81105-tests-unitaires-js
into main
pull from: wip/81105-tests-unitaires-js
merge into: entrouvert:main
entrouvert:main
entrouvert:wip/84434-audit-settings
entrouvert:wip/69003-trace-external-workflow
entrouvert:wip/78318-group-adjacent-subfield-columns
entrouvert:wip/77522-create-formdata-set-block-subfield
entrouvert:wip/84136-passage-a-nox
entrouvert:wip/tests-jenkins
entrouvert:wip/test-ci
entrouvert:wip/18896-gadjo-popups
entrouvert:wip/15763-backoffice-field-types-on-workflow-page
entrouvert:wip/41460-workflow-zoom-with-ctrl
entrouvert:wip/27993-display-message-rich-text
entrouvert:wip/78777-template-data-source
entrouvert:wip/60412-dynamic-prefill-select2-card
entrouvert:wip/81734-rewrite-stats-in-sql
entrouvert:wip/43196-use-session-for-passive-auth
entrouvert:wip/74723-last-jump
entrouvert:wip/66067-admin-permissions-check-all
entrouvert:wip/79738-role-usage
entrouvert:wip/81595-formdef-inspect-fields-in-page-url
entrouvert:wip/81496-application-diff-version
entrouvert:wip/77911-decimal-queries
entrouvert:wip/80843-unicite-identifiant
entrouvert:wip/73401-longueur-champ-text
entrouvert:wip/69291-warn-on-time-related-conditions
entrouvert:wip/81020-clamp
entrouvert:hotfix/v9.94
entrouvert:wip/80613-visited-objects
entrouvert:wip/80462-stats-enlever-le-choix-Tous-les-
entrouvert:wip/80360-form-details-titles
entrouvert:wip/59221-import-none-role
entrouvert:wip/79858-has-role-filter-uuid
entrouvert:wip/79859-liste-image-live-update-champ-ignore
entrouvert:wip/79775-tox-v4-compat
entrouvert:tmp-paul/godo-dependency-riddance
entrouvert:hotfix/v9.68
entrouvert:hotfix/v9.58
entrouvert:wip/72091-remove-python-option
entrouvert:hotfix/v9.36
entrouvert:hotfix/v9.21
entrouvert:wip/75724-live-validation-js
entrouvert:wip/76875-Recherche-par-numero-de-telephon
entrouvert:wip/75724-error-template-markup
entrouvert:wip/75724-JS-live-validation
entrouvert:wip/75170-testdef-revoir-la-creation
entrouvert:wip/75795-sql-application_name
entrouvert:wip/75777-Doublon-d-utilisateur-au-provisi
entrouvert:wip/75647-cron-ne-pas-bloquer-sur-une-erre
entrouvert:hotfix/v8.98
entrouvert:wip/75178-Retirer-l-application-d-ExifRest
entrouvert:hotfix/v8.90
entrouvert:wip/74840-tox-30
entrouvert:wip/74840-tox-31
entrouvert:wip/73674-sql-cleanup
entrouvert:wip/74435-show-max-file-size-in-error
entrouvert:wip/check-pylint-broad-exception-raised
entrouvert:wip/xxxxx-native-form-pages
entrouvert:wip/73860-enforce-phone-fr-validation
entrouvert:wip/73513-audit-reduce-default-retention-delay
entrouvert:hotfix/v8.68
entrouvert:wip/72989-testdef-gerer-les-pages-conditio
entrouvert:wip/69561-page-title
entrouvert:wip/72704-testdef-verifier-la-validation-d
entrouvert:wip/72802-wf-actions-tracing-table
entrouvert:wip/72860-geojson-missing-id_property
entrouvert:wip/72862-i18n-none-template
entrouvert:wip/70508-missing-edited-data
entrouvert:wip/71789-empty-supported-languages
entrouvert:wip/72859-recreate-formdef-indexes
entrouvert:wip/72857-call-command-close-conn
entrouvert:wip/72682-grep-backoffice-fields
entrouvert:wip/72851-anonymised-tz
entrouvert:wip/38269-adapt-some-category-slugs
entrouvert:wip/72819-myspace-redirect
entrouvert:wip/72815-steps-title
entrouvert:wip/71590-translate-card-digests
entrouvert:wip/61416-cards-fields-directory
entrouvert:wip/72809-stub-data-source
entrouvert:wip/71020-anonymisation-as-trigger-date
entrouvert:wip/72083-add-deprecated-to-python-labels
entrouvert:wip/72803-snapshot-no-changes
entrouvert:wip/72801-jsonvalue-migration-exceptions
entrouvert:wip/71455-move-form-tokens-to-database
entrouvert:wip/72096-datasource-jsondef
entrouvert:wip/72765-phone-number-prefill
entrouvert:wip/31201-redirect-as-endpoint
entrouvert:wip/67090-saml-lier-la-session-en-cours-a-
entrouvert:wip/xxx-track-possible-regression
entrouvert:wip/72623-native-home-anyformdata
entrouvert:wip/71937-add-json-output-in-inspect-tool
entrouvert:hotfix/v8.54
entrouvert:wip/39178-history-message-template
entrouvert:wip/XXX-optimize-condition
entrouvert:wip/71471-fullname-vs-hobo
entrouvert:wip/XXXXX-test-jumps
entrouvert:wip/71330-api-include-workflow-data-param
entrouvert:wip/71333-lazy-evolution-and-old-pickles
entrouvert:wip/71327-redirect-query-string-trailing-slash
entrouvert:wip/71316-redirect-to-correct-category
entrouvert:wip/71303-api-fix-include-evolution
entrouvert:wip/69108-api-formdata-split-full
entrouvert:wip/71252-wscall-deps-conditions
entrouvert:wip/71152-api-export-import-category
entrouvert:wip/71184-preview-redirection
entrouvert:wip/71183-preview-redirection
entrouvert:wip/71183-edit-backoffice-redirection
entrouvert:wip/71176-summary-display-labels-as-p
entrouvert:wip/71102-timetable-a11y-focus-on-week-change
entrouvert:wip/71103-timetable-a11y-keyboard-nav
entrouvert:wip/71101-timetable-a11y-week-nav-buttons
entrouvert:wip/71091-evolution-metadata-p-tag
entrouvert:wip/71118-post-same-slug
entrouvert:wip/71087-filename-p-tag
entrouvert:wip/71051-edit-with-category
entrouvert:wip/70259-import-submission-channel
entrouvert:wip/71038-backoffice-data-admin-url
entrouvert:wip/71034-fullname-template
entrouvert:wip/70952-get-cron-status-no-lock
entrouvert:wip/4281-use-filewidget-in-export-to-model-action
entrouvert:wip/70045-ignore-anonymised-formdata-in-jumps
entrouvert:wip/70639-order-filter-options
entrouvert:wip/70990-restricted-api-user-substvars
entrouvert:wip/70458-create-doc-section
entrouvert:wip/70576-add-action-types-to-deprecation-page
entrouvert:wip/70978-not-set
entrouvert:wip/70979-fix-distance-filter-templatetags
entrouvert:wip/68883-go-to-mail-template
entrouvert:wip/70773-tempfile-link-on-edit-card
entrouvert:wip/70931-api-geojson-no-result
entrouvert:wip/70949-a-in-rich-text
entrouvert:wip/70858-mail-template-category-in-create
entrouvert:wip/70772-fix-json-import-bad-user-format
entrouvert:wip/70644-fix-get-int-or-404
entrouvert:wip/70914-tracing-members
entrouvert:wip/70904-pgpassword
entrouvert:wip/70908-cron-setproctitle
entrouvert:wip/70907-cron-legacy-needed
entrouvert:wip/70906-meta-unique-index
entrouvert:wip/70000-wf-edit-carddata-evolution-bis
entrouvert:wip/70898-missing-card-custom-view-redirect
entrouvert:wip/70702-api-export-import-set-categories
entrouvert:wip/69375-api-export-import-cards-forms-objects-dependencies
entrouvert:wip/69441-api-export-import-wscall-dependencies
entrouvert:wip/62800-formdata-snapshot-bis
entrouvert:wip/70853-remove-static-pages-support
entrouvert:wip/70606-api-export-import-redirect-url
entrouvert:wip/70685-parallel-cron
entrouvert:wip/70587-dedup-sms
entrouvert:wip/70575-add-field-types-to-deprecation-page
entrouvert:wip/69546-redirect-form-to-url-with-category-bis
entrouvert:wip/69546-redirect-form-to-url-with-category
entrouvert:wip/test-formdata-snapshot-show-diffs
entrouvert:wip/67283-L-affectation-d-un-id-inconnu-a-
entrouvert:hotfix/v8.17
entrouvert:wip/xxxxx-responses-as-mock-library
entrouvert:wip/68413-sql-simplify-fields-used-items
entrouvert:wip/68324-custom_view-2
entrouvert:wip/27991-rich-hints
entrouvert:hotfix/v8.4
entrouvert:wip/64499-computed-field-only-cards
entrouvert:wip/67843-itemsfield-with-none-prefill
entrouvert:wip/clean-more-pickle-code
entrouvert:wip/59052-prefill-items
entrouvert:wip/xxxxx-flex-backoffice
entrouvert:wip/xxxxx-api-perfs
entrouvert:hotfix/v7.93
entrouvert:wip/65104-texte-riche-pour-le-message-d-er
entrouvert:wip/xxxxx-transient-data-table
entrouvert:hotfix/v7.87
entrouvert:wip/api-prefetch-users-and-roles
entrouvert:wip/sql-get-listing-item-ids
entrouvert:wip/check-test-admin-pages-sql-mode
entrouvert:wip/64768-fix-dynamic-internal-id-filter
entrouvert:wip/64260-disable-table-fields
entrouvert:misc/id-matching
entrouvert:wip/62760-block-remove-label
entrouvert:wip/62919-block-remove-row
entrouvert:wip/56640-add-informative-pages-into-summary
entrouvert:wip/63038-extend-error-messages-with-examples
entrouvert:wip/62750-a11y-all
entrouvert:hotfix/v7.46
entrouvert:wip/62344-clean-snapshot-models-check-usage
entrouvert:hotfix/v7.42
entrouvert:wip/61728-computed-and-field-position
entrouvert:wip60469-index-gin-for-arrays
entrouvert:wip/60611-fix-computed-field-with-lazylist
entrouvert:wip/58884-agendas-datasource
entrouvert:wip/58208-formulaire-un-autosave-peut-se-t
entrouvert:wip/60025-wscall-allow-empty-parameter-values
entrouvert:wip/59914-do-not-trace-skipped-jumps
entrouvert:wip/xxxxx-do-no-reload-empty-evolution
entrouvert:wip/59683-fix-test
entrouvert:wip/try-to-fix-test
entrouvert:hotfix/v7.17
entrouvert:wip/58632-allow-empty-values-on-create-formdata
entrouvert:wip/43614-move-post-formdata-to-advanced-wscall-options
entrouvert:wip/56802-remove-display-exception-settings
entrouvert:wip/57066-filter-by-on-list-of-dicts
entrouvert:wip/pin-pylint
entrouvert:wip/56205-La-recherche-sur-un-champ-date-e
entrouvert:wip/55494-card-summary-status
entrouvert:wip/pylint-too-many-xxx
entrouvert:hotfix/v6.66
entrouvert:wip/users-in-functions
entrouvert:hotfix/v6.62
entrouvert:hotfix/v6.54
entrouvert:wip/get-roles-translation-refactor-to-list
entrouvert:wip/tests-close-files
entrouvert:hotfix/v6.33
entrouvert:wip/pylint-no-init-hook
entrouvert:wip/pylint-more
entrouvert:hotfix/v6.27
entrouvert:hotfix/v6.18
entrouvert:hotfix/v6.7
entrouvert:wip/jenkins-check-black
entrouvert:hotfix/v5.96
entrouvert:wip/49538-wscall-record-errors-more-more
entrouvert:hotfix/v5.84
entrouvert:hotfix/v5.75
entrouvert:wip/48678-add-items-options-for-radio
entrouvert:hotfix/v5.70
entrouvert:hotfix/v5.51
entrouvert:wip/46617-map-data-as-dictionary
entrouvert:wip/setuptools
entrouvert:wip/admin-tests-split
entrouvert:hotfix/v5.24
entrouvert:hotfix/v5.18
entrouvert:wip/widget-list
entrouvert:wip/transfer-form-value
entrouvert:wip/readonly-validation
entrouvert:hotfix/v5.6
entrouvert:wip/43384-jump-compute-timeout-errors
entrouvert:wip/django-22
entrouvert:hotfix/v4.56
entrouvert:wip/latest-pylint
entrouvert:hotfix/v4.46
entrouvert:wip/alternate-file-storage
entrouvert:hotfix/v4.40
entrouvert:wip/38852-Evaluation-live-des-formulaires-
entrouvert:wip/python3-part2
entrouvert:hotfix/v4.22
entrouvert:wip/36752-fc-attr-verification-bypassed
entrouvert:wip/36037-datasource-notype
entrouvert:hotfix/v4.2
entrouvert:wip/31942-wipe-exclude
entrouvert:wip/checkboxes-tpl
entrouvert:wip/django
entrouvert:wip/future
entrouvert:wip/misc-fred
entrouvert:wip/json-with-files-content
entrouvert:wip/alfortville
entrouvert:debian-squeeze
entrouvert:debian-wheezy
entrouvert:qommon-for-authentic1
entrouvert:v2012.3
No reviewers
Labels
Clear labels
No items
No Label
Milestone
Clear milestone
No items
No Milestone
Assignees
Clear assignees
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.
No due date set.
Dependencies
No dependencies set.
Reference: entrouvert/wcs#666
Reference in New Issue
No description provided.
Delete Branch "wip/81105-tests-unitaires-js"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Le test est là à titre d'exemple, je le retirerai si c'est validé. Le choix de vitest rapport à jest parce qu'il supporte sans installation ni configuration supplémentaire les modules ES6 et jsdom, contrairement à jest. Le package.json ne sert qu'à faire tourner les tests.
Par contre le "blazing fast" annoncé ici https://vitest.dev/ est tout relatif. Blazing fast pour du nodejs, probablement.
Pour tester :
En ayant au préalable fait une prière aux oracles de la compatibilité entre versions de NodeJS (18.13.0 chez moi).
Même avec la même version,
Ma faute, c'est deux commandes : npm install puis npm run test, j'ai corrigé la description.
2e2fea0f67
to597433296c
597433296c
tob789422571
b789422571
toe2f231ae4c
e2f231ae4c
to27760c502c
js: configure vitest + jsdom test environments (#81105)to js: configure web-test-runner test environment (#81105)Une autre tentative.
On utilise web-test-runner, qui lance les tests dans un browser (en utilisant Playwright ici).
https://modern-web.dev/docs/test-runner/overview/
Au prix d'une installation initiale plus lourde (il faut télécharger le driver firefox pour playwright), on teste dans un "vrai" environnement, et pas un mock comme JSDOM. On peut aussi déboguer les tests directement dans le navigateur, et les faire potentiellement tourner sur Chrome & Safari sur Jenkins. Et on peut aussi faire des tests dans des pages HTML directement, plutôt que de faire un document.body.innerHTML = "...", ce qui permet de mieux tester tout de qui est DOMContentLoaded et patin couffin.
J'ai essayé de me passer de package.json en installant tout dans l'environnement nodeenv, mais ça pose beaucoup de problème de résolution des packages dans les tests. Donc je sais que c'est pas beau un package.json, mais on peut choisir de ne pas le regarder.
tox -e web-test-runner
Pour lancer, c'est passé sur Jenkins.
js: configure web-test-runner test environment (#81105)to WIP: js: configure web-test-runner test environment (#81105)Après quelques tests dans la vraie vie, c'est quand même maxi plus lourd avec web-test-runner : c'est pas stable, la configuration est compliquée. Je vais revenir à vitest + happy-dom (qui parait un peu plus solide que JSDom), et configurer ça dans tox.
27760c502c
tod8b23170e0
WIP: js: configure web-test-runner test environment (#81105)to js: configure vitest + happy-dom test environment (#81105)tox -e vitest
désormais, plus de package.json, tout est géré dans tox.
On en discutera de toute façon en novembre mais je visualise assez mal encore comment de vrais tests vont être écrits.
Je trouverais super de prendre un problème récent et de lui associer un test unitaire js, je pense ici à #82406, en regardant les commits touchant au js ces derniers mois, je me dis que peut-être #80310 pourrait aussi être un candidat.