I’ve been a Drupal VM user for a long time, but lately I’ve been using a
combination Drupal VM and Docker for my local development environment. There
were a couple of issues preventing me from completely switching to Docker - one
of which being that when I tried running of my Simpletest tests, a lot of them
would fail where they would pass when run within Drupal VM.
Here’s an excerpt from my docker-compose.yml file:
TL;DR You need to include the name of your web server container as the
--url option to run-scripts.php.
I’ve been a Drupal VM user for a long time, but lately I’ve been using a
combination Drupal VM and Docker for my local development environment.
There were a couple of issues preventing me from completely switching to
Docker - one of which being that when I tried running of my Simpletest tests, a
lot of them would fail where they would pass when run within Drupal VM.
Here’s an excerpt from my docker-compose.yml file:
This creates a new instance of the php container, sets the working directory
to my Drupal root and runs Drupal’s run-tests.sh script with some arguments.
In this case, I'm running the OverrideNodeOptionsTestCase class for the
override_node_options tests. Once complete, the container is deleted because of
the --rm option.
This resulted in 60 of the 112 tests failing, whereas they all passed when run
within a Drupal VM instance.
Test summary
------------
Override node options 62 passes, 60 fails, 29 exceptions, and 17 debug messages
Test run duration: 2 min 25 sec
Running the tests again with the--verbose option, I saw this message appear in
the output below some of the failing tests:
simplexml_import_dom(): Invalid Nodetype to import
**Up After checking that I had all of the required PHP extensions installed, I
ran docker-compose exec php bash to connect to the php container and ran
curl http://localhost to check the output. Rather than seeing the HTML for the
site, I got this error message:
curl: (7) Failed to connect to localhost port 80: Connection refused
Whereas curl http://nginx returns the HTML for the page, so included it with
the --url option to run-tests.sh, and this resulted in my tests all passing.
Test summary
------------
Override node options 121 passes, 0 fails, 0 exceptions, and 34 debug messages
Test run duration: 2 min 31 sec
Note: In this example I have separate nginx and php containers, but I've
tried and had the same issue when running Nginx and PHP-FPM in the same
container - e.g. called app - and still needed to add --url http://app in
order for the tests to run successfully.
I don’t know if this issue is macOS specfic (I know that Drupal CI is based
on Docker, and I don’t know if it’s an issue) but I’m going to test also on my
Ubuntu Desktop environment and investigate further and also compare the test run
times for Docker in macOS, Docker in Ubuntu and within Drupal VM. I’m also going
to test this with PHPUnit tests with Drupal 8.
Was this interesting?
About me
I'm an Acquia-certified Drupal Triple Expert with 17
years of experience, an open-source software maintainer and Drupal core contributor, public speaker, live streamer, and host of the Beyond Blocks podcast.