I’m trying to set up functional tests in
Drupal 9 using
BrowserTestBase. The Type of Tests page on drupal.com and Browser test tutorial are quite clear that browser tests will build their own website and browser;
Browser tests create a complete Drupal installation and a virtual web
browser and then use the virtual web browser to walk the Drupal
install through a series of tests, just like you would do if you were
doing it by hand.
However, as soon as I try to run a browser test using
run-tests.sh I get an error stating that the
--url parameter needs to be provided (this led me down a rabbit hole: Curl error in basic functional test). There is a tutorial on running browser tests, which clarifies that the
--url parameter is in fact needed;
In phpunit.xml make the following changes:
- Set the SIMPLETEST_BASE_URL variable to the URL of your site.
- Set the SIMPLETEST_DB variable to point to the URL of your Drupal database.
- If you are placing phpunit.xml somewhere other than core, change the value of the phpunit tag’s ‘bootstrap’ attribute to reflect the
- For kernel and functional tests, set the BROWSERTEST_OUTPUT_DIRECTORY.
The section titled Run All PHPUnit Tests The Way The Testbot Does It sheds a bit of light on this by clarifying that when testbot runs a Browser test, it sets up a drupal site with the testing module enabled:
The first step is to make sure you have a fully working Drupal
installation, with the Testing module enabled. The drupal.org testbot
assumes that contributed modules will be installed inside the
modules/contrib directory and Drupal’s application root for unit tests
is set to a value assuming this directory structure.
This seems to suggest that the browser test does not “create a complete Drupal installation” but rather requires one. But that leaves more questions about these tests;
- Can the URL be any drupal site with the testing module enabled?
- What changes does the test make to the website?
- Do I need a fresh site everytime I run the tests?
- Do I need to provide login details? Is that handled by the testing module?
- What about the database, what changes are made to it? How do I revert them?
Any kind of clarity on how this works would be appreciated, as I think it will probably answer my other question as well.