Running Drupal's PHPUnit test suite on CiviCRM integration modules!
This assumes you're in a Composer build for Drupal (notes on how to adjust if you're not will be provided.)
You'll need:
- a webserver pointed at the site – Apache, Nginx, or PHP Built-in server.
- MySQL – CiviCRM does not work with SQLite
- Chromedriver –
brew cask install chromedriver
Run Chromedriver with its default settings, for example just: chromedriver
.
Add the phpunit.xml
to the root of your Drupal project. If you're not in a Composer project build, remove the /web
prefix from any paths.
Edit the phpunit.xml
to set the appropriate environment variables, or set them in your environment manually:
Here's some example settings from a Docker Compose file.
- SYMFONY_DEPRECATIONS_HELPER=weak
- SIMPLETEST_DB=mysql://db:db@db:3306/db
- SIMPLETEST_BASE_URL=http://web
- BROWSERTEST_OUTPUT_DIRECTORY=/var/www/html/private/browsertest_output
- BROWSERTEST_OUTPUT_BASE_URL=$DDEV_PRIMARY_URL
- MINK_DRIVER_ARGS_WEBDRIVER=["chrome", {"browserName":"chrome","chromeOptions":{"args":["--disable-gpu","--headless", "--no-sandbox"]}}, "http://chromedriver:9515"]
Here's a quick explaination
SYMFONY_DEPRECATIONS_HELPER
: stops deprecations from causing PHPUnit to failSIMPLETEST_DB
: the database connection string ofmysql://USER:PASS@HOST:PORT/DB_NAME
SIMPLETEST_BASE_URL
: the URL to your codebase over the webserverBROWSERTEST_OUTPUT_DIRECTORY
: provide a directory to save HTML output toBROWSERTEST_OUTPUT_BASE_URL
: optional, if the links in generated output are different than the server URLMINK_DRIVER_ARGS_WEBDRIVER
: the Chromedriver args. The phpunit.xml in this gist has it preconfigured.
With the phpunit.xml
copied to your Drupal directory you can run the tests:
./vendor/bin/phpunit web/modules/contrib/webform_civicrm
Note: Make sure chromedriver is running in another terminal window for FunctionalJavascript tests