For general guides on PHPUnit tests, and their application in Wordpress, see
Please make sure you check the version of the PHPUnit Documentation you're viewing against the version this plugin is using in ./composer.json
. You can change to any version of the documentation by updating the docs url.
- svn
- mysql (and mysqladmin)
First, set up your tests database by running the following command in the root plugin directory. Make sure you substitute your local root mysql password.
cd wp-discourse
bash bin/install-wp-tests.sh wordpress_test root 'password' localhost latest
If this command returns an error, clean up anything it created before running it again, i.e.
## Remove the tmp files
rm -rf /path/to/tmp/wordpress
rm -rf /path/to/tmp/wordpress-tests-lib
## Drop the test database
mysql
DROP DATABASE wordpress_test;
FLUSH PRIVILEGES;
exit
Make sure that command completes successfully, with no errors, before continuing.
If you haven't already, run composer install
in the root plugin directory to pull in the main tests dependencies.
One additional dependency you need in your environment is the php extension Xdebug. The installation of Xdebug is environment specific, however we would recommend you use the Xdebug Installation Wizard to ensure your installation is correct.
For testing purposes Xdebug should be run in coverage
mode, which means that you should have a line in your php.ini
that look like this
xdebug.mode = coverage
The tests suite is configured by the phpunit.xml
file. Read more about the elements in the file, and their usage in the PHPUnit Documentation.
The tests coverage whitelist in the config file limits the coverage reports to the classes in the plugin that have tests.
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">lib</directory>
</whitelist>
This scope should be expanded over time as more classes have tests written for them. To see the overall progress of tests coverage, remove the coverage whitelist elements from the config file.
Once you've completed the Setup
section, run the tests suite using
vendor/bin/phpunit
To run a specific file add the path to the file as an argument
vendor/bin/phpunit tests/phpunit/test-discourse-publish.php
To run a specific test in a suite use the --filter
option
vendor/bin/phpunit tests/phpunit/test-discourse-publish.php --filter=test_sync_to_discourse_when_creating_with_embed_error
To add a coverage report to the output add --coverage-text
, which will send the report to stdout.
vendor/bin/phpunit --coverage-text
Run phpunit --help
to see other report formats that can be generated (e.g. html or crap4j).
Multisite tests are written and run separately. The multisite tests are in tests/phpunit/multisite
and the mulitsite config is in tests/phpunit/multisite.xml
.
Multisite tests extend the single-site tests of the same class. This allows for any tests and helper methods for that class to be used in the multisite test. For example see tests/phpunit/multisite/test-discourse-publish-multisite.php
.
class DiscoursePublishMultisiteTest extends DiscoursePublishTest
When the multisite test is run the single-site tests in the parent test class will also be run in the multisite environment.
To run a multisite test, you need to use the multisite config
vendor/bin/phpunit -c tests/phpunit/multisite.xml