我已将 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));
}
//...
}
在
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>