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
$wgEnableJavaScriptTestnatrue.
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_SERVERaMW_SCRIPT_PATHna adresu URL vaší místní wiki. Můžete je také vložit do souboru.bash_profileve svém domovském adresáři a automaticky nastavit proměnné zatížení na nových kartách Terminál.# MediaWiki-Docker exportMW_SERVER=http://localhost:8080 exportMW_SCRIPT_PATH=/w
# composer serve exportMW_SERVER=http://localhost:4000 exportMW_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:
$ npmrunqunit 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/gruntqunit--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-envz hlavního adresáře MediaWiki. (Fresh automaticky najde proměnné MW_SERVER a MW_SCRIPT_PATH ze souboru.envMediaWiki-Docker.) - Jakmile jste uvnitř svého izolovaného shellu, spusťte
npm cipro 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