Phpunit на Symfony 3.4 Вы запросили несуществующий сервис - PullRequest
0 голосов
/ 01 марта 2019

Я работаю над установкой Symfony 3.4, которая была обновлена ​​с версии 2.

Когда я пытаюсь запустить модульный тест с помощью этой команды

./bin/phpunit tests/MyBundle/ -c tests/phpunit.xml

, я получаю следующую ошибку:

    Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException: You have requested a non-existent service "XXXX\MyBundle\Services\ListServices".

/apps/xxxx/unitTest/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Container.php:348
/apps/xxxx/unitTest/tests/MyBundle/Services/ListServicesTest.php:19

Я обнародовал Услуги

  services:
    _defaults:
      autowire: true
      autoconfigure: true
      public: true

Но это не сработало.Я также попытался добавить проход компилятора, но это была его собственная червь ...

мой phpunit.xml

<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
                   backupGlobals="false"
                   colors="true"
                   convertErrorsToExceptions   = "true"
                   convertNoticesToExceptions  = "true"
                   convertWarningsToExceptions = "true"
                   processIsolation            = "false"
                   stopOnFailure               = "false"
                   syntaxCheck                 = "false"
                   stderr                      = "true"
                   bootstrap="bootstrap_test.php"
>
<php>
    <ini name="error_reporting" value="-1" />
    <server name="KERNEL_CLASS" value="AppKernel" />
    <server name="KERNEL_DIR" value="../app/" />
    <env name="SYMFONY_DEPRECATIONS_HELPER" value="weak"/>
    <env name="APP_ENV" value="test"/>
</php>


<testsuites>
    <testsuite name="Project Test Suite">
        <directory>../tests/*</directory>
    </testsuite>
</testsuites>

<filter>
    <whitelist>
        <directory>../src</directory>
        <exclude>
            <directory>../src/*/*Bundle/Resources</directory>
            <directory>../src/*/*Bundle/Tests</directory>
            <directory>../src/*/*Bundle/DataFixtures</directory>
            <directory>../src/*/*Bundle/Admin</directory>
            <directory>../src/*/*Bundle/DependencyInjection</directory>
            <directory>../src/*/*Bundle/Twig</directory>
        </exclude>
    </whitelist>
</filter>
</phpunit>

это мой тестовый файл

namespace Tests\MyBundle\Services;

use XXXX\MyBundle\Services\ListServices;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class ListServicesTest extends WebTestCase
{
    /**
     * @test
     */    
public function testGetCurrentList()
    {
        $kernel = new AppKernel('dev', false);
        $kernel->boot();
        $container = $kernel->getContainer();

        $listService = $container->get(ListServices::class);

        $this->assertNotNull($listService->getCurrentList());

    }
}

Есть идеи, как заставить работать модульные тесты?спасибо

1 Ответ

0 голосов
/ 06 марта 2019

Вы пытаетесь получить службу по имени (имени класса), а не по псевдониму из контейнера.Сервис должен быть зарегистрирован в контейнере:

services:
    your_service_alias:
      class: YourApp\Services\ListServices
      arguments: (if any)
        - "@some_dependency"

Тогда в тесте вы должны получить сервис по его псевдониму

$container->get('your_service_alias')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...