10000 clarifying how to create a public alias for a test · symfony/symfony-docs@2f3514f · GitHub
[go: up one dir, main page]

Skip to content

Commit 2f3514f

Browse files
authored
clarifying how to create a public alias for a test
1 parent 1d80249 commit 2f3514f

File tree

1 file changed

+47
-6
lines changed

1 file changed

+47
-6
lines changed

testing.rst

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -556,12 +556,53 @@ command.
556556

557557
.. tip::
558558

559-
Keep in mind that, if a private service is never used as a dependency of another service in
560-
your application, it is then removed from the container. So, if you try to access a private
561-
service in a test through the special test container and that service isn't used elsewhere
562-
you'll get a ``ServiceNotFoundException``. The solution, depending on the context, is to
563-
define the service as explicitly ``public`` or to inject it where you'll need it so Symfony
564-
doesn't remove it.
559+
If a private service is *never* used in your application (outside of your test), it
560+
is *removed* from the container and cannot be accessed as described above. In that
561+
case, you can create a public alias in the ``test`` environment and access it
562+
via that alias:
563+
564+
.. configuration-block::
565+
566+
.. code-block:: yaml
567+
568+
# config/services_test.yaml
569+
services:
570+
# access the service in your test via
571+
# self::$container->get('test.App\Test\SomeTestHelper')
572+
test.App\Test\SomeTestHelper:
573+
# the id of the private service
574+
alias: 'App\Test\SomeTestHelper'
575+
public: true
576+
577+
.. code-block:: xml
578+
579+
<!-- config/services_test.xml -->
580+
<?xml version="1.0" encoding="UTF-8" ?>
581+
<container xmlns="http://symfony.com/schema/dic/services"
582+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
583+
xsi:schemaLocation="http://symfony.com/schema/dic/services
584+
https://symfony.com/schema/dic/services/services-1.0.xsd">
585+
586+
<services>
587+
<!-- ... -->
588+
589+
<service id="test.App\Test\SomeTestHelper" alias="App\Test\SomeTestHelper" public="true"/>
590+
</services>
591+
</container>
592+
593+
.. code-block:: php
594+
595+
// config/services_test.php
596+
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
597+
598+
use App\Service\MessageGenerator;
599+
use App\Updates\SiteUpdateManager;
600+
601+
return function(ContainerConfigurator $configurator) {
602+
// ...
603+
604+
$services->alias('test.App\Test\SomeTestHelper', 'App\Test\SomeTestHelper')->public();
605+
};
565606
566607
.. tip::
567608

0 commit comments

Comments
 (0)
0