Tessier d8b9162932 update drupal | 4 years ago | |
---|---|---|
.. | ||
Drupal | 4 years ago | |
TestSuites | 4 years ago | |
fixtures | 4 years ago | |
README.md | 4 years ago | |
bootstrap.php | 4 years ago |
You need the Drupal core development dependencies installed, in order to run any tests. You can install them using Composer by running
composer install
in the Drupal root directory. These dependencies should not be installed on a production site.
Create a directory called sites/simpletest and make sure that it is writable by the web server and/or all users.
Copy the core/phpunit.xml.dist file to phpunit.xml, and place it somewhere convenient (inside the core directory may not be the best spot, since that directory may be managed by Composer or Git). You can use the -c option on the command line to tell PHPUnit where this file is (use the full path).
Settings to change in this file:
To run JavaScript tests based on the \Drupal\FunctionalJavascriptTests\WebDriverTestBase base class, you will need to install the following additional software:
The PHPUnit executable is vendor/bin/phpunit -- you will need to locate your vendor directory (which may be outside the Drupal root).
Here are commands to run one test class, list groups, and run all the tests in a particular group:
./vendor/bin/phpunit -c /path/to/your/phpunit.xml path/to/your/class/file.php
./vendor/bin/phpunit --list-groups
./vendor/bin/phpunit -c /path/to/your/phpunit.xml --group Groupname
Drupal core currently has a number of different types of tests that can be run using PHPUnit:
These are organized into PHPUnit test suites. You can run one test suite or many
in combination by using --testsuite
on the command line:
./vendor/bin/phpunit -c /path/to/your/phpunit.xml --testsuite unit
./vendor/bin/phpunit -c /path/to/your/phpunit.xml --testsuite functional,functional-javascript
These can be combined with groups and filters:
./vendor/bin/phpunit -c /path/to/your/phpunit.xml --testsuite build --group Composer
./vendor/bin/phpunit -c /path/to/your/phpunit.xml --testsuite build --exclude-group Build
./vendor/bin/phpunit -c /path/to/your/phpunit.xml --testsuite unit --filter ClassTest::testMethod
More information on running tests can be found at https://www.drupal.org/docs/8/phpunit/running-phpunit-tests
You can run JavaScript tests that are based on the \Drupal\FunctionalJavascriptTests\WebDriverTestBase base class in the same way as other PHPUnit tests, except that before you start, you will need to start chromedriver using port 4444, and keep it running:
/path/to/chromedriver --port=4444
composer install
)engines
field. You can use
nvm and yvm
to manage your local versions of these.core
folder, run yarn install
.env.example
to .env
and
editing as necessary..env
)core
folder, run yarn test:nightwatch --env local
to run
the tests.
By default this will output reports to core/reports
**/tests/**/Nightwatch/(Tests|Commands|Assertions)
yarn test:nightwatch --tag core
yarn test:nightwatch --skiptags core
yarn test:nightwatch tests/Drupal/Nightwatch/Tests/exampleTest.js
Nightwatch tests, as well as custom commands, assertions and pages, can be
placed in any folder with the pattern
**/tests/**/Nightwatch/(Tests|Commands|Assertions|Pages)
. For example:
tests/Nightwatch/Tests
src/tests/Nightwatch/Tests
tests/src/Nightwatch/Tests
tests/Nightwatch/Commands
tests/src/Nightwatch/Assertions
tests/src/Nightwatch/Pages
It's helpful to follow existing patterns for test placement, so for the action
module they would go in core/modules/action/tests/src/Nightwatch
.
The Nightwatch configuration, as well as global tests, commands, and assertions
which span many modules/systems, are located in core/tests/Drupal/Nightwatch
.
If your core directory is located in a subfolder (e.g. docroot
), then you can
edit the search directory in .env
to pick up tests outside of your Drupal
directory. Tests outside of the core
folder will run in the version of node
you have installed. If you want to transpile with babel (e.g. to use import
statements) outside of core, then add your own babel config to the root of your
project. For example, if core is located under docroot/core
, then you could
run yarn add babel-preset-env
inside docroot
, then copy the babel settings
from docroot/core/package.json
into docroot/package.json
.
If you run into file permission problems while running tests, you may need to invoke the phpunit executable with a user in the same group as the web server user, or with access to files owned by the web server user. For example:
sudo -u www-data ./vendor/bin/phpunit -c /path/to/your/phpunit.xml --group Groupname
If you have permission problems accessing files after running tests, try putting
$settings['file_chmod_directory'] = 02775;
in your settings.php or local.settings.php file.
You may need to use absolute paths in your phpunit.xml file, and/or in your phpunit command arguments.