Tests unitaires JavaScript
MediaWiki utilise QUnit pour réaliser les tests unitaires sur sa base de code JavaScript.
Exécution à partir d'un navigateur
- Définir
$wgEnableJavaScriptTest
àtrue
.
Ceci est déjà initialisé dans la plupart des environnements de développement tels que Quickstart ou MediaWiki-Docker . - Voir Special:JavaScriptTest dans un navigateur pour exécuter les tests.
Exécution à partir de la ligne de commande
Configuration en ligne
- Définir les variables d'environnement
MW_SERVER
etMW_SCRIPT_PATH
avec l'URL de votre wiki local. Vous pouvez également les mettre dans un fichier.bash_profile
de votre répertoire home pour définir automatiquement les variables de charge dans les nouveaux onglets Terminal.# MediaWiki-Docker export MW_SERVER=http://localhost:8080 export MW_SCRIPT_PATH=/w
# composer serve export MW_SERVER=http://localhost:4000 export MW_SCRIPT_PATH=/
- Aller dans le répertoire du noyau MediaWiki et exécuter
npm ci
.
Exécuter
Ceci exécute les tests QUnit dans Headless Chrome :
$ npm run qunit
Running "karma:main" (karma) task
INFO [launcher]: Starting browser ChromeHeadless
mediawiki.util
✔ escapeRegExp
✔ debounce
…
Finished in 5.42 secs
SUMMARY:
✔ 440 tests completed
Vous pouvez exécuter les tests QUnit sur des composants spécifiques avec l'option --qunit-component
.
Passez le nom d'une extension ou d'un habillage, ou MediaWiki
pour les tests du noyau MediaWiki.
$ node_modules/grunt/bin/grunt qunit --qunit-component=GrowthExperiments
Running "karma:main" (karma) task
INFO [launcher]: Starting browser ChromeHeadless
testrunner
✔ Loader status
✔ assert.htmlEqual
ext.growthExperiments.Utils.js
✔ serializeActionData
✔ isUserInVariant
ext.growthExperiments.Help/HelpPanelProcessDialog.js
✔ getDefaultPanelForSuggestedEditSession for copyedit
✔ updateEditMode for link-recommendation
✔ updateEditMode for copyedit, isEditing
ext.growthExperiments.Homepage.SuggestedEdits/PagerWidget.js
✔ constructor
✔ setMessage with currentPosition < totalCount
✔ setMessage with currentPosition === totalCount
✔ setMessage with currentPosition > totalCount
ext.growthExperiments.NewcomerTaskLogger.js
✔ constructor
✔ should log impressions
✔ should get log metadata
ext.growthExperiments.StructuredTask/addimage/AddImageUtils.js
✔ getRenderData: target width < original width
✔ getRenderData: the image file needs to be re-rasterized
✔ getRenderData: vector image
✔ getRenderData: target width > original width
✔ getRenderData: 3x target width
✔ getRenderData: 2.5x target width
✔ getRenderData: vertical image with landscape viewport
✔ getRenderData: with specified render width
Finished in 0.03 secs
SUMMARY:
✔ 46 tests completed
Vous pouvez utiliser l'argument --qunit-watch
de QUnit pour voir les fichiers associés à un composant, et réexécuter automatiquement les tests lorsque ces fichiers ont été modifié.
Prise en compte de la sécurité
Envisager l'utilisation de Fresh, ou si vous avez déjà un autre environnement isolé, vérifiez que des versions similaires de Node.js et de npm sont installées (nous recommandons l'avant dernière version LTS de Node.js). Pourquoi ?
- Pour entrer dans l'environnement isolé, exécutez
fresh-node -net -env
à partir du répertoire noyau de MediaWiki. (Fresh trouve automatiquement les variables MW_SERVER et MW_SCRIPT_PATH du fichier.env
de MediaWiki-Docker.) - Une fois dans votre shell isolé, exécutez
npm ci
pour installer ou mettre à jour les dépendances. - Pour commencer les tests exécuter
npm run qunit
.
Comment contribuer ?
Exécuter les tests avant de valider
Prenez l'habitude d'exécuter des tests unitaires avant de faire le commit et de soumettre vos modifications dans Gerrit .
Ecrire des tests unitaires
Ecrire les tests unitaires pour la nouvelle fonctionnalité, de sorte à couvrir les lacunes dans la couverture de tests dûes à la modification des modules du noyau MediaWiki existants.
Ecrire un test
Il est convenu de nommer le fichier de la suite de test après le module qu'il couvre.
Par exemple mediawiki.user.test.js
couvre le module mediawiki.user
.
À l'intérieur de la suite de test il doit y avoir un appel à QUnit.module
avec le nom du module.
Les tests unitaires du noyau MediaWiki se trouvent dans le répertoire tests/qunit/resources/
.
Enregistrer un test
Noyau MediaWiki
Les suites de test sont ajoutées à l'enregistrement du module test.MediaWiki
dans /tests/qunit/QUnitTestResources.php
.
Les essais sont organisés dans une structure de répertoires correspondant à la structure de répertoires du code testé.
Par exemple :
Le test unitaire de resources/mediawiki.base/util.js
se trouve sur tests/qunit/resources/mediawiki.util/util.test.js
.
Exemple :
'mediawiki.tests.qunit.suites' => array(
'scripts' => array(
'tests/qunit/resources/mediawiki.base/html.test.js',
'tests/qunit/resources/mediawiki.util/util.test.js',
+ 'tests/qunit/resources/mediawiki.example/example.test.js',
),
'dependencies' => array(
'mediawiki.util',
+ 'mediawiki.example',
Les extensions
Les extensions enregistrent leurs tests QUnit via l'attribut QUnitTestModule dans extension.json
.
Voir aussi
- Manual:Hooks/ResourceLoaderTestModules
- Manual:JavaScript unit testing/QUnit guidelines
- Ecrire du code JavaScript testable (mai 2013), Rebecca Murphey, Une liste séparée