Enable PHP assertion errors on Laravel Homestead for development and testing

Laravel’s Homestead vagrant setup is handy to get going quickly on projects and keep them consistent to work on.

I was surprised that it has PHP assertion errors disabled by default. It’s good to have these enabled for local development and testing so that you can catch more problems earlier.

To enable PHP assertion errors in Homestead you can run this:

for phpConf in cli fpm; do
  sudo sed -i 's/zend.assertions = -1/zend.assertions = 1/g' /etc/php/7.*/${phpConf}/php.ini
  sudo sed -i 's/;assert.active = On/assert.active = On/g' /etc/php/7.*/${phpConf}/php.ini
  sudo sed -i 's/;assert.exception = On/assert.exception = On/g' /etc/php/7.*/${phpConf}/php.ini
done

That will enable PHP assertions and assertion errors for cli and web for all versions of PHP 7 in Homestead. I have it on a script so that it’s always run and I won’t forget about it.

You can also enable these at runtime, e.g. if you have a test bootstrap file in phpunit.xml like this:

<phpunit bootstrap="bootstrap/bootstrapTests.php">

Then you can enable PHP assertions and stricter errors during tests with:

<?php

error_reporting(E_STRICT);

assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_EXCEPTION, 1);

require __DIR__ . '/autoload.php';


Tech mentioned