@gitdev

Как в symfony 4 протестировать сервис?

Не могу получить сервис в классе для тестирования. Хотел бы получить с зависимостями которые передаються в конструктор.

Если оставить только эту строчку, тест проходит:
$this->assertEquals(42, 42);

Пробовал получить сервис через DI, тоже ошибка.

В данном случае пишет:
Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException: The "metrag.api.service.realty" service or alias has been removed or inlined when the container was compiled. You should either make it public, or stop using the container directly and use dependency injection instead.

// tests/AppBundle/Util/CalculatorTest.php
namespace Tests\AppBundle\Util;

use App\Metrag\ApiBundle\Services\RealtyService;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class RealtyServiceTest extends WebTestCase
{

    public function testGetOnStatus()
    {
        self::bootKernel();

        // gets the special container that allows fetching private services
        $container = self::$container;

        $realtyService = $container->get('metrag.api.service.realty');

        $this->assertEquals(42, 42);
    }
}


p.s.
Это важно т.к. в сервисе есть логика которую нужно протестировать.
  • Вопрос задан
  • 2233 просмотра
Пригласить эксперта
Ответы на вопрос 2
GTRxShock
@GTRxShock
SA
You should either make it public, or stop using the container directly and use dependency injection instead

так вот ведь все написано, сервис по умолчанию приватный, и после сборки контейнера все линки зачищаются
так что проставьте ему уровень паблик, либо затягивайте через di

если первый вариант, то в config/services.yaml
metrag.api.service.realty:
    class: ...
    public: true


Пробовал получить сервис через DI, тоже ошибка.

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

p.s. а почему не по канону? :) $container->get(RealtyService::class)
Ответ написан
Комментировать
index0h
@index0h
PHP, Golang. https://github.com/index0h
Зачем вам контейнер? Создаете себе сервис через new, мокаете его зависимости.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы