Configuring deprecation warnings when running tests in Symfony
Some background
If you're using Symfony for a while, you're probably aware of the SYMFONY_DEPRECATIONS_HELPER
environment variable that you can set in phpunit.xml config. The variable is part
of the https://packagist.org/packages/symfony/phpunit-bridge and comes with most default Symfony PHP Framework installs.
I personally found the naming of the options not very intuitive, and until I played around to figure out the behavior, I didn't really get how they were supposed to be working.
The options
- max[total]
- max[self]
- max[direct]
- max[indirect]
- verbose
- ignoreFile
- logFile
- quiet
max
The max
option is used to set a threshold on the number of deprecation notices, either based on their type (direct, indirect) or total number, after which the command line returns an error exit code.
There are several types of suboptions for max:
max[total]
- sets a threshold on the total number of deprecations, both direct and indirectmax[direct]
- puts a threshold on deprecations that resulted directly from your codemax[indirect]
- sets a threshold for on the number of deprecations caused by dependenciesmax[self]
- used for libraries that use the depreaction system themselves and cannot afford to use any of the other configurations from above
SYMFONY_DEPRECATIONS_HELPER="max[total]=100" ./vendor/bin/phpunit
vebose
The verbose
option is used to get more details about the exact files in which the depreaction notices were triggered. It's often used in a url encoded manner with other options:
SYMFONY_DEPRECATIONS_HELPER="max[total]=100&verbose=1" ./vendor/bin/phpunit
ignoreFile
The ignoreFile
option can be used to define inside a file a list of deprecation notices that should be ignored. Note that this feature was introduced starting with Symfony 6.1
SYMFONY_DEPRECATIONS_HELPER="ignoreFile=./tests/ignoreFile.txt" ./vendor/bin/phpunit
ignoreFile.txt :
`Serializer`
`EntityManager`
`Entity`
Basically each row represents a pattern of the files that should be ignored.
generateBaseline & baselineFile
In order to create a baseline file you can use the generateBaseline
and baselineFile
options as follows:
SYMFONY_DEPRECATIONS_HELPER='generateBaseline=true&baselineFile=./tests/baseline-file.json' ./vendor/bin/phpunit
After the baseline file is generated you could run the tests without the generation option like:
SYMFONY_DEPRECATIONS_HELPER='baselineFile=./tests/baseline-file.json' ./vendor/bin/phpunit
logFile
If you prefer turning off verbose output and write all of the deprecation notices in a file you can use the logFile option. Note that this option also hides the count of deprecation notices at the end of the test run.
SYMFONY_DEPRECATIONS_HELPER='logFile=./var/log/deprecations.log' ./vendor/bin/phpunit
quiet
The quiet
option allows to change the verbosity more granularly than vebose
and does so per type of deprecation. For example if you want to hide all
indirect deprecation notices you could use something like:
SYMFONY_DEPRECATIONS_HELPER='quiet[]=indirect' ./vendor/bin/phpunit
One important thing to note about quiet
is that, similarly to vebose
, it just hides the details of the deprecations but doesn't change the exist code of
the command in any way if the number of threshold deprecations was reached.
Unlike logFile, when using quiet
, the count of deprecation notices is still shown.