Tests unitaires JavaScript

This page is a translated version of the page Manual:JavaScript unit testing and the translation is 100% complete.
Suite de test QUnit de MediaWiki.

MediaWiki utilise QUnit pour réaliser les tests unitaires sur sa base de code JavaScript.

Exécution à partir d'un navigateur

  1. Définir $wgEnableJavaScriptTest à true.
    Ceci est déjà initialisé dans la plupart des environnements de développement tels que Quickstart ou MediaWiki-Docker .
  2. 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 et MW_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