Manual:JavaScript unit testing

From MediaWiki.org
Jump to: navigation, search
MediaWiki's QUnit test suite running in Chrome.

MediaWiki uses QUnit to unit test its JavaScript code base.

The unit tests for MediaWiki core are located in the tests/qunit/suites directory[1].

Run the tests[edit]

Ensure $wgEnableJavaScriptTest is set to true in your LocalSettings.php file.

In a browser[edit]

Open Special:JavaScriptTest in a browser to run the tests.

Options:

Check for Globals
Core URL parameter of QUnit.[2]
No try-catch
Core URL parameter of QUnit.[2]
Enable ResourceLoaderDebug
Toggle ResourceLoader debug mode.
Module
Select a module from the list to immediately run it.[3]

From the command line[edit]

Use npm install && npm run qunit from the MediaWiki core directory to run QUnit tests from the command-line in Chrome and aggregate the results.

How to help?[edit]

Run tests before committing[edit]

Make it a habit to run unit tests before committing and submitting your changes to Gerrit.

Write unit tests[edit]

Always write unit tests for new functionality. We're also looking to expand our unit test coverage of already existing modules in the MediaWiki JavaScript library.

Write a test[edit]

It is the convention to name the test suite file after the module it covers. For example, mediawiki.user.test.js covers the mediawiki.user module.

Inside the test suite should be one, and only one, call to QUnit.module with the module name.

Register a test[edit]

MediaWiki core[edit]

Test suites are added to the registration of the mediawiki.tests.qunit.suites module in /tests/qunit/QUnitTestResources.php.

Tests are organised into a directory structure that matches the directory structure of the code being tested. For example: The unit test for resources/mediawiki.util/mediawiki.util.js can be found at tests/qunit/suites/resources/mediawiki.util/mediawiki.util.test.js.

Example:

 'mediawiki.tests.qunit.suites' => array(
 	'scripts' => array(
 		'tests/qunit/suites/resources/mediawiki/mediawiki.test.js',
+		'tests/qunit/suites/resources/mediawiki/mediawiki.example.test.js',
 		'tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js',
 		'tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js',
 	),
 	'dependencies' => array(
 		'mediawiki',
+		'mediawiki.example',
 		'mediawiki.user',
 		'mediawiki.util',

Extensions[edit]

Extensions register their QUnit tests via the ResourceLoaderTestModules hook.

See also[edit]

Notes[edit]