簡體   English   中英

找不到 Symfony 4 phpunit 類 WebTestCase

[英]Symfony 4 phpunit class WebTestCase not found

我用 composer create project 開始了一個新的 symfony/skeleton 項目。

現在我想添加php單元,所以我做

composer require --dev test

Flex 下載並安裝 phpunit-bridge。

但是我在運行 php 單元時遇到了問題,因為它似乎沒有正確自動加載。

我運行bin/phpunit並顯示:

#!/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

我的 phpunit.xml.dist 是由 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>

bin/phpunit.php 也是來自 flex 的:

#!/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';

這是我的測試類/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());
    }
}

這是我的 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.*"
        }
    }
}

嘗試像這樣添加它:

作曲家需要 --dev symfony/phpunit-bridge

問候

所以這可能對你有用。

bin/phpunit刪除這些行

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

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

我也有這個問題,這個問題解決了

首先在 symfony 4 上刪除這個包

composer remove symfony/phpunit-bridge

然后運行

composer require --dev phpunit/phpunit

然后在root中編輯phpunit.xml.dist

<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">

完成后,您現在可以運行:

 ./vendor/bin/phpunit test

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM