Příručka:Testování jednotek JavaScriptu
MediaWiki používá QUnit k unit test své báze kódu JavaScript.
Spuštění z prohlížeče
- Nastavte
$wgEnableJavaScriptTest
natrue
.
Toto je již nastaveno ve většině vývojářských prostředí, jako je Quickstart nebo MediaWiki-Docker . - Navštivte Special:JavaScriptTest v prohlížeči a spusťte testy.
Spuštění z příkazového řádku
Jednorázové nastavení
- Nastavte proměnné prostředí
MW_SERVER
aMW_SCRIPT_PATH
na adresu URL vaší místní wiki. Můžete je také vložit do souboru.bash_profile
ve svém domovském adresáři a automaticky nastavit proměnné zatížení na nových kartách Terminál.# 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=/
- Přejděte do hlavního adresáře MediaWiki a spusťte
npm ci
.
Spuštění
Toto spouští testy QUnit v 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
Pomocí volby --qunit-component
můžete spustit testy QUnit pro konkrétní komponenty.
Předejte název rozšíření nebo vzhledu nebo MediaWiki
na základní testy 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
Argument --qunit-watch
pro QUnit můžete použít ke sledování souborů přidružených ke komponentě a automaticky znovu spustit testy, pokud se tyto soubory změní.
Bezpečnostní hledisko
Zvažte použití Fresh, nebo pokud již máte jiné izolované prostředí, zajistěte instalaci srovnatelné verze Node.js a npm (doporučuje se předposlední Node.js LTS). Proč?
- Chcete-li vstoupit do izolovaného prostředí, spusťte
fresh-node -net -env
z hlavního adresáře MediaWiki. (Fresh automaticky najde proměnné MW_SERVER a MW_SCRIPT_PATH ze souboru.env
MediaWiki-Docker.) - Jakmile jste uvnitř svého izolovaného shellu, spusťte
npm ci
pro instalaci nebo aktualizaci všech závislostí. - Chcete-li spustit testy, spusťte
npm run qunit
.
Jak se zapojit?
Spuštění testu před potvrzením
Zvykněte si spouštět testy jednotek před potvrzením a odesláním změn do Gerrit .
Psaní testů jednotek
Napište testy jednotek pro nové funkce a zvažte zaplnění mezer v pokrytí při změně stávajících modulů v jádru MediaWiki.
Psaní testu
Je obvyklé pojmenovat soubor testovací sady podle modulu, který pokrývá.
Například mediawiki.user.test.js
pokrývá modul mediawiki.user
.
Uvnitř testovací sady by mělo být volání na QUnit.module
s názvem modulu.
Testy jednotek pro jádro MediaWiki jsou umístěny v adresáři tests/qunit/resources/
.
Zaregistrování testu
Jádro MediaWiki
Testovací sady se přidávají k registraci modulu test.MediaWiki
v /tests/qunit/QUnitTestResources.php
.
Testy jsou organizovány do adresářové struktury, která odpovídá adresářové struktuře testovaného kódu.
Například:
Unit test na resources/mediawiki.base/util.js
lze nalézt na tests/qunit/resources/mediawiki.util/util.test.js
.
Příklad:
'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',
Rozšíření
Rozšíření registrují své testy QUnit prostřednictvím atributu QUnitTestModule v extension.json
.
Související odkazy
- Manual:Hooks/ResourceLoaderTestModules
- Manual:JavaScript unit testing/QUnit guidelines
- Writing Testable JavaScript (květen 2013), Rebecca Murphey, A List Apart