Skip to content

Commit 53d0f56

Browse files
committed
[FrameworkBundle] Fix service reset between tests
1 parent fea8f98 commit 53d0f56

File tree

5 files changed

+50
-1
lines changed

5 files changed

+50
-1
lines changed

src/Symfony/Bundle/FrameworkBundle/Test/KernelTestCase.php

+5
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,11 @@ protected static function ensureKernelShutdown()
160160
static::$kernel->shutdown();
161161
static::$booted = false;
162162

163+
if ($container->has('services_resetter')) {
164+
// Instantiate the service because Container::reset() only resets services that have been used
165+
$container->get('services_resetter');
166+
}
167+
163168
if ($container instanceof ResetInterface) {
164169
$container->reset();
165170
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Bundle\FrameworkBundle\Tests\Functional\Bundle\TestBundle\TestServiceContainer;
13+
14+
class ResettableService
15+
{
16+
private $count = 0;
17+
18+
public function myCustomName(): void
19+
{
20+
++$this->count;
21+
}
22+
23+
public function getCount(): int
24+
{
25+
return $this->count;
26+
}
27+
}

src/Symfony/Bundle/FrameworkBundle/Tests/Functional/KernelTestCaseTest.php

+11
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Symfony\Bundle\FrameworkBundle\Tests\Functional\Bundle\TestBundle\TestServiceContainer\NonPublicService;
1616
use Symfony\Bundle\FrameworkBundle\Tests\Functional\Bundle\TestBundle\TestServiceContainer\PrivateService;
1717
use Symfony\Bundle\FrameworkBundle\Tests\Functional\Bundle\TestBundle\TestServiceContainer\PublicService;
18+
use Symfony\Bundle\FrameworkBundle\Tests\Functional\Bundle\TestBundle\TestServiceContainer\ResettableService;
1819
use Symfony\Bundle\FrameworkBundle\Tests\Functional\Bundle\TestBundle\TestServiceContainer\UnusedPrivateService;
1920
use Symfony\Component\DependencyInjection\ContainerInterface;
2021

@@ -41,4 +42,14 @@ public function testThatPrivateServicesAreAvailableIfTestConfigIsEnabled()
4142
$this->assertTrue($container->has('private_service'));
4243
$this->assertFalse($container->has(UnusedPrivateService::class));
4344
}
45+
46+
public function testServicesAreResetOnEnsureKernelShutdown()
47+
{
48+
static::bootKernel(['test_case' => 'TestServiceContainer']);
49+
50+
$resettableService = static::getContainer()->get(ResettableService::class);
51+
52+
self::ensureKernelShutdown();
53+
self::assertSame(1, $resettableService->getCount());
54+
}
4455
}

src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/TestServiceContainer/services.yml

+5
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,8 @@ services:
1313
arguments:
1414
- '@Symfony\Bundle\FrameworkBundle\Tests\Functional\Bundle\TestBundle\TestServiceContainer\NonPublicService'
1515
- '@Symfony\Bundle\FrameworkBundle\Tests\Functional\Bundle\TestBundle\TestServiceContainer\PrivateService'
16+
17+
Symfony\Bundle\FrameworkBundle\Tests\Functional\Bundle\TestBundle\TestServiceContainer\ResettableService:
18+
public: true
19+
tags:
20+
- kernel.reset: { method: 'myCustomName' }

src/Symfony/Component/DependencyInjection/Container.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,6 @@ public function initialized(string $id)
299299
public function reset()
300300
{
301301
$services = $this->services + $this->privates;
302-
$this->services = $this->factories = $this->privates = [];
303302

304303
foreach ($services as $service) {
305304
try {
@@ -310,6 +309,8 @@ public function reset()
310309
continue;
311310
}
312311
}
312+
313+
$this->services = $this->factories = $this->privates = [];
313314
}
314315

315316
/**

0 commit comments

Comments
 (0)