It’s about time the Translate extension gets QUnit tests: the amount of JavaScript in it has exploded in the past year. Here is a quick intro on how to add QUnit tests for a MediaWiki extension which doesn’t have any yet.
Step 1: Create a tests
directory.
The Translate extension already has a tests/
directory with a lot of PHPUnit tests . For now I just created a qunit
subdirectory under it.
Step 1: Create a test file.
The function I want to test is in a file at
resources/js/ext.translate.parsers.js
.
I created a corresponding test file
tests/qunit/ext.translate.parsers.test.js
.
Step 3: Register the test file.
In Translate, all the resource loader modules are defined in Resources.php
. At the bottom of the file I register the test modules via the ResourceLoaderTestModules
hook with an anonymous function.
$wgHooks['ResourceLoaderTestModules'][] = // Dependencies must be arrays here function ( array &$modules ) use ( $resourcePaths ) { $modules['qunit']['ext.translate.parsers.test'] = array( 'scripts' => array( 'tests/qunit/ext.translate.parsers.test.js' ), 'dependencies' => array( 'ext.translate.parsers' ), ) + $resourcePaths; return true; };
The $resourcePaths
I have defined already earlier:
$resourcePaths = array( 'localBasePath' => __DIR__, 'remoteExtPath' => 'Translate' );
Step 4: Write the tests
Here is a simple example with only one test. Note how the assert is taken via function parameter to avoid using global functions.
/** * Tests for ext.translate.parsers.js. * * @file * @licence GPL-2.0+ */ ( function ( $, mw ) { 'use strict'; QUnit.module( 'ext.translate.parsers', QUnit.newMwEnvironment() ); QUnit.test( '-- External links', 1, function ( assert ) { assert.strictEqual( 'This page is [in English]', mw.translate.formatMessageGently( 'This page is [in English]' ), 'Brackets without protocol doesn\'t make a link' ); } ); }( jQuery, mediaWiki ) );
Step 5: Run the tests
I ran the tests in my development wiki and they passed. The patch set is in Gerrit. Also see the QUnit page in mediawiki.org.