See https://github.com/lullabot/drainpipe first.
This is a composer package containing the testing helpers for Drainpipe i.e.
should be included in require-dev
and not installed in production
environments.
- Your Drupal project must be using
drupal/core-composer-scaffold
- Run:
or if using DDEV:
composer config extra.drupal-scaffold.gitignore true composer config --json --merge extra.drupal-scaffold.allowed-packages '["lullabot/drainpipe-dev"]'
ddev composer config extra.drupal-scaffold.gitignore true ddev composer config --json extra.drupal-scaffold.allowed-packages \[\"lullabot/drainpipe-dev\"]
- Ensure your project's
composer.json
now contains the following:"extra": { "drupal-scaffold": { "gitignore": true, "allowed-packages": [ "lullabot/drainpipe-dev" ] } }
- Run
composer require lullabot/drainpipe-dev --dev
Runs all static tests i.e. those which don't require a running Drupal environment.
The static tests consist of:
Runs security checks for composer packages against the FriendsOfPHP Security Advisory Database and Drupal core and contributed modules against Drupal's Security Advisories.
- YAML lint on
.yml
files in theweb
directory - Twig lint on files in
web/modules
,web/profiles
, andweb/themes
composer validate
These cannot currently be customised. See #9.
Runs PHPStan with
mglaman/phpstan-drupal on
web/modules/custom
, web/themes/custom
, and web/sites
.
Runs PHPUnit tests in:
web/modules/custom/**/tests/src/Unit
test/phpunit/**/Unit
web/modules/custom/**/tests/src/Kernel
test/phpunit/**/Kernel
web/modules/custom/**/tests/src/Functional
test/phpunit/**/Functional
web/modules/custom/**/tests/src/FunctionalJavaScript
test/phpunit/**/FunctionalJavaScript
When running the main test
task, this is split into test:phpunit:functional
and test:phpunit:static
.
Support for DTT is included,
just set this in your Taskfile.yml
:
vars:
DRUPAL_TEST_TRAITS: true
This will additionally look for tests in:
web/modules/custom/**/tests/src/ExistingSite
test/phpunit/**/ExistingSite
web/modules/custom/**/tests/src/ExistingSiteJavascript
test/phpunit/**/ExistingSiteJavascript
You will need to ensure a running Drupal site is available for running DTT tests, e.g. by running the site installer.
Runs PHPCS with Drupal coding standards provided by Coder module.
Runs all functional tests i.e. those which require a running Drupal environment.
Verifies that exported configuration matches the current configuration in Drupal's database.
This will help you setup your project to run Nightwatch tests by installing the necessary node packages and DDEV configurations.
Runs functional browser tests with Nightwatch.
If you are using DDEV, Drainpipe will have created a
.ddev/docker-compose.selenium.yaml
file that provides Firefox and Chrome as
containers, as well as an example test in
test/nightwatch/example.nightwatch.js
.
To run the above test you will need to have a working Drupal installation in the
Firefox and Chrome containers. You can run the test:nightwatch:siteinstall
helper task to run the Drupal site installer for both sites with your existing
configuration.
After you've verified this test works, you can ignore it in your composer.json
:
"extra": {
"drupal-scaffold": {
"file-mapping": {
"[project-root]/test/nightwatch/example.nightwatch.js": {
"mode": "skip"
}
}
}
Nightwatch tests must have the suffix .nightwatch.js
to be recognised by
the test runner.
Whilst tests are running, you can view them in realtime through your browser.
https://:7900 for Chrome https://:7901 for Firefox
The password for all environments is secret
.
Attempts to autofix any issues discovered by tests. Currently, this is just fixing PHPCS errors with PHPCBF.