3

I started a new symfony/skeleton project with composer create project.

Now I want to add php unit, so I do

composer require --dev test

Flex downloads and installs phpunit-bridge.

However I have a problem with running php unit, as it doesn't seem to autoload correctly.

I run bin/phpunit and it shows:

#!/usr/bin/env php
PHP Fatal error:  Class 'Symfony\Bundle\FrameworkBundle\Test\WebTestCase' not found in /var/www/backend/tests/TestTest.php on line 6
PHP Stack trace:
PHP   1. {main}() /var/www/backend/bin/phpunit:0
PHP   2. require() /var/www/backend/bin/phpunit:20
PHP   3. include() /var/www/backend/vendor/symfony/phpunit-bridge/bin/simple-phpunit:261
PHP   4. PHPUnit\TextUI\Command::main() /var/www/backend/bin/.phpunit/phpunit-6.5/phpunit:17
PHP   5. Symfony\Bridge\PhpUnit\Legacy\CommandForV6->run() /var/www/backend/bin/.phpunit/phpunit-6.5/src/TextUI/Command.php:148
PHP   6. Symfony\Bridge\PhpUnit\Legacy\CommandForV6->handleArguments() /var/www/backend/bin/.phpunit/phpunit-6.5/src/TextUI/Command.php:159
PHP   7. PHPUnit\Util\Configuration->getTestSuiteConfiguration() /var/www/backend/bin/.phpunit/phpunit-6.5/src/TextUI/Command.php:837
PHP   8. PHPUnit\Util\Configuration->getTestSuite() /var/www/backend/bin/.phpunit/phpunit-6.5/src/Util/Configuration.php:918
PHP   9. PHPUnit\Framework\TestSuite->addTestFiles() /var/www/backend/bin/.phpunit/phpunit-6.5/src/Util/Configuration.php:1014
PHP  10. PHPUnit\Framework\TestSuite->addTestFile() /var/www/backend/bin/.phpunit/phpunit-6.5/src/Framework/TestSuite.php:403
PHP  11. PHPUnit\Util\Fileloader::checkAndLoad() /var/www/backend/bin/.phpunit/phpunit-6.5/src/Framework/TestSuite.php:325
PHP  12. PHPUnit\Util\Fileloader::load() /var/www/backend/bin/.phpunit/phpunit-6.5/src/Util/Fileloader.php:48
PHP  13. include_once() /var/www/backend/bin/.phpunit/phpunit-6.5/src/Util/Fileloader.php:64

My phpunit.xml.dist is the one installed by flex:

<?xml version="1.0" encoding="UTF-8"?>

<!-- https://phpunit.de/manual/current/en/appendixes.configuration.html -->
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/6.5/phpunit.xsd"
         backupGlobals="false"
         colors="true"
         bootstrap="vendor/autoload.php"
>
    <php>
        <ini name="error_reporting" value="-1" />
    </php>

    <testsuites>
        <testsuite name="Project Test Suite">
            <directory>tests</directory>
        </testsuite>
    </testsuites>

    <filter>
        <whitelist>
            <directory>src</directory>
        </whitelist>
    </filter>

    <listeners>
        <listener class="Symfony\Bridge\PhpUnit\SymfonyTestsListener" />
    </listeners>
</phpunit>

And bin/phpunit.php is the one that comes from flex as well:

#!/usr/bin/env php
<?php

if (!file_exists(dirname(__DIR__).'/vendor/symfony/phpunit-bridge/bin/simple-phpunit')) {
    echo "Unable to find the `simple-phpunit` script in `vendor/symfony/phpunit-bridge/bin/`.\n";
    exit(1);
}

$classLoader = require dirname(__DIR__).'/vendor/autoload.php';
StudentReport\Kernel::bootstrapEnv('test');
$classLoader->unregister();

if (false === getenv('SYMFONY_PHPUNIT_REMOVE')) {
    putenv('SYMFONY_PHPUNIT_REMOVE=');
}
if (false === getenv('SYMFONY_PHPUNIT_DIR')) {
    putenv('SYMFONY_PHPUNIT_DIR='.__DIR__.'/.phpunit');
}

require dirname(__DIR__).'/vendor/symfony/phpunit-bridge/bin/simple-phpunit';

Here's my test class /tests/TestTest.php:

<?php namespace StudentReport\Tests;


use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class TestTest extends WebTestCase
{

    public function testHomepage()
    {
        $client = static::createClient();

        $client->request('GET', '/');

        $this->assertEquals(200, $client->getResponse()->getStatusCode());
    }
}

Here's my composer.json:

{
    "type": "project",
    "license": "proprietary",
    "require": {
        "php": "^7.1.3",
        "ext-ctype": "*",
        "ext-iconv": "*",
        "doctrine/doctrine-fixtures-bundle": "^3.0",
        "friendsofsymfony/rest-bundle": "^2.4",
        "friendsofsymfony/user-bundle": "^2.1",
        "jms/serializer-bundle": "^2.4",
        "league/tactician-bundle": "^1.1",
        "lexik/jwt-authentication-bundle": "2.5.4",
        "nelmio/api-doc-bundle": "^3.3",
        "nelmio/cors-bundle": "^1.5",
        "ramsey/uuid": "^3.8",
        "symfony/console": "^4.1",
        "symfony/flex": "^1.1",
        "symfony/framework-bundle": "^4.1",
        "symfony/monolog-bundle": "^3.3",
        "symfony/orm-pack": "^1.0",
        "symfony/swiftmailer-bundle": "^3.2",
        "symfony/templating": "*",
        "symfony/yaml": "*"
    },
    "require-dev": {
        "symfony/dotenv": "*",
        "symfony/maker-bundle": "^1.7",
        "symfony/test-pack": "^1.0"
    },
    "config": {
        "preferred-install": {
            "*": "dist"
        },
        "sort-packages": true
    },
    "autoload": {
        "psr-4": {
            "StudentReport\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "StudentReport\\Tests\\": "tests/"
        }
    },
    "replace": {
        "paragonie/random_compat": "2.*",
        "symfony/polyfill-ctype": "*",
        "symfony/polyfill-iconv": "*",
        "symfony/polyfill-php71": "*",
        "symfony/polyfill-php70": "*",
        "symfony/polyfill-php56": "*"
    },
    "scripts": {
        "auto-scripts": {
            "cache:clear": "symfony-cmd",
            "assets:install %PUBLIC_DIR%": "symfony-cmd"
        },
        "post-install-cmd": [
            "@auto-scripts"
        ],
        "post-update-cmd": [
            "@auto-scripts"
        ]
    },
    "conflict": {
        "symfony/symfony": "*"
    },
    "extra": {
        "symfony": {
            "allow-contrib": "true",
            "require": "4.1.*"
        }
    }
}
1

3 Answers 3

1

Try adding it like this:

composer require --dev symfony/phpunit-bridge

Regards

Sign up to request clarification or add additional context in comments.

Comments

0

So this may work for you.

To remove these lines from bin/phpunit

$classLoader = require dirname(__DIR__).'/vendor/autoload.php';
App\Kernel::bootstrapEnv('test');
$classLoader->unregister();

Source -> https://github.com/symfony/symfony/issues/29215#issuecomment-438719415

Comments

0

I had this problem too.The problem was fixed by this solution

At first remove this package on symfony 4

composer remove symfony/phpunit-bridge

then run

composer require --dev phpunit/phpunit

Then edit phpunit.xml.dist in the root

<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
         backupGlobals="false"
         colors="true"
         bootstrap="vendor/autoload.php">

When this finishes, you can now run:

 ./vendor/bin/phpunit test

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.