mediawiki-extensions-Popups/docs/adr/0007-prefer-running-qunit-tests-in-node-js.md
Stephen Niedzielski 8ba5c0f773 Hygiene: make JSDoc configs consistent
Make the Popups, MobileFrontend, and MinervaNeue JSDocs consistent. For
Popups, specify package.json, readme, and default template options and
moved doc/ to docs/ and autogenerated JavaScript documentation from
doc/autogenerated to docs/js.

http://usejsdoc.org/about-configuring-jsdoc.html
http://usejsdoc.org/about-commandline.html
http://usejsdoc.org/about-configuring-default-template.html

Bug: T188261
Change-Id: I81e64f06265f1ecc4e2ee159deef9b204ea7e957
2018-07-23 14:45:14 -05:00

1.6 KiB

7. Prefer running QUnit tests in node.js

Date: 08/03/2017

Status

Accepted

Context

QUnit tests were set up to run on a browser or phantom.js on top of a running mediawiki server.

We want to:

  • Speed up the test running in a development cycle
    • Full page reload every time you change tests or source takes too long
  • Leverage common.js in our tests to load our sources and other test helpers like stubs
    • Remove global variables

Decision

QUnit tests will be migrated from tests/qunit/ext.popups/ to tests/node-qunit/ and will be run by the script npm run test:node in a node environment with access to QUnit, a fake jsdom, and jQuery. Powered by the node package mw-node-qunit.

Node tests will be run in CI too in the npm job that runs npm test.

It is preferred to use the node-qunit test environment, as it is fast, leverages common.js modules, and isolated.

When impossible because of extreme coupling with mediawiki.js, put the integration tests in tests/qunit/.

Consequences

  • README has instructions on how to run different types of tests
  • Node based QUnit tests...
    • can be run independently of mediawiki
    • are isolated and need to stub global variables used in sources
    • are run in node.js 6+ which runs in CI on wikimedia infrastructure
      • which means they leverage that platforms advantages (loading files with common.js, using es6, using the node stdlib if necessary)
  • Most tests are migrated to tests/node-qunit and only the ones that strictly need it remain in tests/qunit (processLinks.test.js for example, see comment in file)