Symfony 5.4 .env.test 在使用 phpunit 时不会覆盖 .env

问题描述 投票:0回答:1

我已将 Symfony 从 4.4 升级到 5.4。每个依赖项都已升级并安装了食谱。

我有一个 .env 和一个 .env.test (就 dotenv 而言没有其他东西)。

我还有一个 phpunit.xml.dist,如 symfony 配方中所述(完全相同的文件,带有 )。我的tests/bootstrap.php也是一样的。

在进行功能测试时,环境变量是从 .env 加载的,但 .env.test 并未加载。我知道这是因为测试没有找到 .env.test 中设置的变量。 我还发现 APP_ENV 没有改变,仍然是“dev”,我真的不知道为什么。我以为phpunit.xml.dist中的APP_ENV是加载测试环境的关键,但事实并非如此。

我用来运行测试的命令

php bin/phpunit

有人在 Symfony 升级时遇到过此类问题吗?我真的测试了我所知道的一切来解决这个问题。

由于我的文件与recipe相同,所以我只提供我的composer.json。也许问题来自这里,以及我做的一个测试的例子。

还有什么问题请尽管问。

{
    "type": "project",
    "license": "proprietary",
    "require": {
        "php": "^7.4",
        "ext-calendar": "*",
        "ext-ctype": "*",
        "ext-iconv": "*",
        "ext-json": "*",
        "ext-ldap": "*",
        "ext-openssl": "*",
        "ext-redis": "*",
        "ext-zip": "*",
        "beberlei/doctrineextensions": "^1.2",
        "composer/package-versions-deprecated": "1.11.99.1",
        "doctrine/annotations": "^1.0",
        "doctrine/doctrine-bundle": "^2.2",
        "doctrine/doctrine-migrations-bundle": "^3.0",
        "doctrine/orm": "^2.7",
        "hslavich/oneloginsaml-bundle": "^2",
        "icewind/smb": "^3.5",
        "knplabs/knp-paginator-bundle": "^5.9",
        "knplabs/knp-snappy-bundle": "^1.6",
        "phpdocumentor/reflection-docblock": "^5.2",
        "phpoffice/phpspreadsheet": "^1.16",
        "scienta/doctrine-json-functions": "~4.0",
        "sensio/framework-extra-bundle": "^5.1",
        "setasign/fpdf": "1.8.*",
        "setasign/fpdi": "^2.0",
        "stof/doctrine-extensions-bundle": "^1.3",
        "symfony/apache-pack": "^1.0",
        "symfony/asset": "5.4.*",
        "symfony/console": "5.4.*",
        "symfony/dotenv": "5.4.*",
        "symfony/expression-language": "5.4.*",
        "symfony/flex": "^1.1",
        "symfony/form": "5.4.*",
        "symfony/framework-bundle": "5.4.*",
        "symfony/http-client": "5.4.*",
        "symfony/intl": "5.4.*",
        "symfony/mime": "5.4.*",
        "symfony/monolog-bundle": "^3.1",
        "symfony/process": "5.4.*",
        "symfony/property-access": "5.4.*",
        "symfony/property-info": "5.4.*",
        "symfony/proxy-manager-bridge": "5.4.*",
        "symfony/runtime": "5.4.*",
        "symfony/security-bundle": "5.4.*",
        "symfony/serializer": "5.4.*",
        "symfony/swiftmailer-bundle": "^3.1",
        "symfony/translation": "5.4.*",
        "symfony/twig-bundle": "5.4.*",
        "symfony/validator": "5.4.*",
        "symfony/web-link": "5.4.*",
        "symfony/workflow": "5.4.*",
        "symfony/yaml": "5.4.*",
        "tomasvotruba/barcode-bundle": "^1.3",
        "twig/extensions": "^1.5"
    },
    "require-dev": {
        "doctrine/doctrine-fixtures-bundle": "^3.2",
        "phpunit/phpunit": "^9.5",
        "squizlabs/php_codesniffer": "3.*",
        "fakerphp/faker": "^1.23",
        "symfony/browser-kit": "^5.4",
        "symfony/css-selector": "^5.4",
        "symfony/debug-bundle": "^5.4",
        "symfony/maker-bundle": "^1.0",
        "symfony/phpunit-bridge": "^5.4",
        "symfony/stopwatch": "^5.4",
        "symfony/web-profiler-bundle": "^5.4"
    },
    "config": {
        "preferred-install": {
            "*": "dist"
        },
        "sort-packages": true,
        "secure-http": false,
        "disable-tls": true,
        "allow-plugins": {
            "symfony/flex": true,
            "phpstan/extension-installer": true,
            "symfony/runtime": true
        }
    },
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "App\\": "src/",
            "App\\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": {
        },
        "post-install-cmd": [
            "@auto-scripts"
        ],
        "post-update-cmd": [
            "@auto-scripts"
        ]
    },
    "conflict": {
        "symfony/symfony": "*"
    },
    "extra": {
        "symfony": {
            "allow-contrib": false,
            "require": "5.4.*"
        }
    }
}

测试示例:

class AccueilControllerTest extends WebTestCase
{
    private KernelBrowser $client;

    protected function setUp(): void
    {
        $kernel = self::bootKernel();
        static::ensureKernelShutdown();
        $this->client = static::createClient();
    }

    /**
     * @return void
     */
    public function testUserNotLoggedIndexRedirectsLogin()
    {
        $this->client->request('GET', '/calculatrice_nos/');
        $this->assertEquals(Response::HTTP_FOUND, $this->client->getResponse()->getStatusCode());

        $expectedRedirectUrl = $this->client->getContainer()->get('router')->generate('app_login', [], UrlGeneratorInterface::ABSOLUTE_URL);
        $this->assertTrue($this->client->getResponse()->isRedirect($expectedRedirectUrl));
    }
    
    //...
}
php symfony phpunit symfony5
1个回答
0
投票

phpunit.xml.dist
中设置(至少)
APP_ENV
var

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

<!-- https://phpunit.readthedocs.io/en/latest/configuration.html -->
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
         backupGlobals="false"
         colors="true"
         bootstrap="tests/bootstrap.php"
         convertDeprecationsToExceptions="false"
>
    <php>
        <server name="APP_ENV" value="test" force="true" />
    </php>

</phpunit>
© www.soinside.com 2019 - 2024. All rights reserved.