Symfony игнорирует макет в тестовом сервисе - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь протестировать сервис с помощью phpunit. Когда я макетирую функцию в моем StatServiceTest, мой сервис игнорирует макет, который я сделал. с примером будет понятнее мой сервис.имл

    my_service:
    class: '%my_service.class%'
    parent: parent_service
    arguments:
        - '@service.repository.commutation'
        - '@service.repository.stat'
        - '@service.repository.switchboard'
        - '%sunrise_host%'

мой сервис: StatService.php

class StatService extends AbstractService
{
    protected $commutationRepository;
    protected $statRepository;
    protected $switchboardRepository;
    protected $sunrise_host;

    public function __construct(CommutationRepository $commutationRepository, StatRepository $statRepository, SwitchboardRepository $switchboardRepository, $sunrise_host)
    {
        $this->commutationRepository = $commutationRepository;
        $this->statRepository = $statRepository;
        $this->switchboardRepository = $switchboardRepository;
        $this->sunrise_host = $sunrise_host;
   }


   public function getNightsWithSunService($id, $start, $end)
   {
       $switchboard = $this->switchboardRepository->getById($id);
       $parameters = array(
        'begin' => (int) $start,
        'end' => (int) $end,
        'lat' => (float) $switchboard->getElement()->getCoordinate()->getLat(),
        'lng' => (float) $switchboard->getElement()->getCoordinate()->getLng(),
        'timezone' => $switchboard->getElement()->getCoordinate()->getTimezone(),
    );
    $buzz = new Buzz();
    $result = $buzz->post(
        $this->sunrise_host.'/nights',
        array(
            'Content-Type' => 'application/json',
        ),
        json_encode($parameters)
    );

    return json_decode($result->getContent(), true);
    }
}

и, наконец, мой StatServiceTest.php

class StatServiceTest extends WebTestCase
{


    public function testGetNightsWithSunService()
    {
        $dic = $this->_client->getKernel()->getContainer();
        $sunriseHost = $dic->getParameter('sunrise_host');
        $id = 426;
        $start = 1538400421;
        $end = 1538569621;
        $mapNights = $this->getNights();
        $mockStatService = $this->getMockBuilder("StatService")
           ->disableOriginalConstructor()
           ->getMock();
        $mockStatService
          ->expects($this->any())
          ->method('getNightsWithSunService')
          ->withConsecutive(array($id, $start, $end))
          ->willReturnOnConsecutiveCalls($mapNights)
        ;
       $statService = new StatService($mockCommutationRepository, 
       $mockStatRepository, $mockSwitchboardRepository, $sunriseHost);

    $result = $statService->getNightsWithSunService($id, $start, $end);

    $nights = array(
        array(
            'start' => 1538414415,
            'end' => 1538458643,
        ),
        array(
            'start' => 1538500702,
            'end' => 1538545117,
        ),
    );
         $this->assertTrue($this->arrays_are_similar($nights, $result));
    }


    public function getNights()
    {
       $nights = array(
           array(
              'start' => 1538414415,
              'end' => 1538458643,
           ),
           array(
              'start' => 1538500702,
              'end' => 1538545117,
           ),
       );

      return $nights;
   }

   public function arrays_are_similar($a, $b)
   {
       // we know that the indexes, but maybe not values, match.
       // compare the values between the two arrays
       foreach ($a as $k => $v) {
          if ($v !== $b[$k]) {
            return false;
          }
       }

       // we have identical indexes, and no unequal values
       return true;
   }
}

ошибка:

testGetNightsWithSunService
Buzz\Exception\RequestException: 
file_get_contents(http://localhost:4244/nights): failed to open 
stream: Connection refused

Я создаю экземпляр своего сервиса и внедряю в него репозитории, которые я высмеивал, я просто помещаю ту часть кода, которая касается проблемы. Что я сделал не так? пожалуйста, любые советы будут полезны

1 Ответ

0 голосов
/ 13 ноября 2018

Решение, которое я основал, состоит в том, чтобы сделать еще один сервис => toolsService с обратным вызовом функции для рабочей части, и тогда мы сможем внедрить этот сервис, и его будет проще смоделировать. Я надеюсь, что это поможет вам

...