Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to show PHP errors when unit testing my Symfony2 bundle?

Currently, when writing a unit test for my Symfony2 bundle, I explicitly set ini_set('display_errors', 1) to make sure I see any errors I made in writing my unit test. This is particularly helpful for fatal errors, such as those resulting from typos in method names.

Example:

# src/Foo/BarBundle/Tests/Security/RoutePermissionCheckerTest.php

namespace Foo\BarBundle\Tests\Security;

use Symfony\Bundle\FrameworkBundle\Tests\TestCase;

class RoutePermissionCheckerTest extends TestCase
{
    public function testIndex()
    {
        ini_set('display_errors', 1);
        $this->nonExistentMethod();
    }
}

Output:

Configuration read from /Users/maurits_dekkers/Sites/hobby/symfony/saas-seed/app/phpunit.xml.dist
...
Fatal error: Call to undefined method Bb\UserBundle\Tests\Security\RoutePermissionCheckerTest::nonExistentMethod() in /Users/maurits_dekkers/Sites/hobby/symfony/saas-seed/src/Bb/UserBundle/Tests/Security/RoutePermissionCheckerTest.php on line 18

Call Stack:
    0.0314     635432   1. {main}() /Users/maurits_dekkers/pear/bin/phpunit:0
    0.5501    1191328   2. PHPUnit_TextUI_Command::main() /Users/maurits_dekkers/pear/bin/phpunit:46
    0.5502    1192056   3. PHPUnit_TextUI_Command->run() /Users/maurits_dekkers/pear/share/pear/PHPUnit/TextUI/Command.php:129
    1.2241    7133440   4. PHPUnit_TextUI_TestRunner->doRun() /Users/maurits_dekkers/pear/share/pear/PHPUnit/TextUI/Command.php:176
    1.2619    7653720   5. PHPUnit_Framework_TestSuite->run() /Users/maurits_dekkers/pear/share/pear/PHPUnit/TextUI/TestRunner.php:349
   14.0128   37804208   6. PHPUnit_Framework_TestSuite->run() /Users/maurits_dekkers/pear/share/pear/PHPUnit/Framework/TestSuite.php:705
   14.0130   37804608   7. PHPUnit_Framework_TestSuite->runTest() /Users/maurits_dekkers/pear/share/pear/PHPUnit/Framework/TestSuite.php:745
   14.0130   37804608   8. PHPUnit_Framework_TestCase->run() /Users/maurits_dekkers/pear/share/pear/PHPUnit/Framework/TestSuite.php:775
   14.0131   37804608   9. PHPUnit_Framework_TestResult->run() /Users/maurits_dekkers/pear/share/pear/PHPUnit/Framework/TestCase.php:783
   14.0131   37805600  10. PHPUnit_Framework_TestCase->runBare() /Users/maurits_dekkers/pear/share/pear/PHPUnit/Framework/TestResult.php:648
   14.0134   37846840  11. PHPUnit_Framework_TestCase->runTest() /Users/maurits_dekkers/pear/share/pear/PHPUnit/Framework/TestCase.php:838
   14.0134   37848304  12. ReflectionMethod->invokeArgs() /Users/maurits_dekkers/pear/share/pear/PHPUnit/Framework/TestCase.php:983
   14.0134   37848336  13. Bb\UserBundle\Tests\Security\RoutePermissionCheckerTest->testIndex() /Users/maurits_dekkers/pear/share/pear/PHPUnit/Framework/TestCase.php:983

However, there must be a better way by means of a configuration setting. I've tried adding an extra Monolog setting to my config_test.yml:

# app/config/config_test.yml
monolog:
    handlers:
        console:
            type:   console
            bubble: false
            level: info

but that does not result in PHP errors being reported during my unit test. The unit test simply stops running.

Is there an easy way to configure my Symfony2 project to always report errors during a unit test?

like image 688
maurits Avatar asked Mar 29 '26 00:03

maurits


1 Answers

You might want to set the following parameters to true in your PHPUnit configuration file (app/config/phpunit.xml):

  • convertErrorsToException
  • convertNoticesToExceptions
  • convertNoticesToExceptions
like image 108
Thierry Marianne Avatar answered Mar 31 '26 10:03

Thierry Marianne