2013-05-28 3 views
1

Я делаю некоторые функциональные тесты с Symfony 2 и phpunit.Symfony 2 Ошибка обслуживания на модуле Тестирование

Но у меня есть некоторые проблемы с Сервисом. Позвольте мне объяснить. Во время теста пробега я хочу использовать некоторую услугу, используемую приложением. Поэтому я Juste установить свою функцию нАлАдкИ для установки ядра:

static::$kernel = static::createKernel(); 
    static::$kernel->boot(); 
    $this->objectFactory = static::$kernel->getContainer()->get('some.application.objectfactory'); 

Так я это и в моей функции я должен использоваться сервисом, который возвращает объект, так я называю свою услугу, как этот

$var = $this->objectFactory->getObject($id); 

и, очевидно, в моей функции Teardown я просто:

protected function tearDown() 
{ 
    $this->client->restart(); 
    unset($this->client, $this->objectFactory); 
} 

Так что моя проблема, когда я запустить тест я имею это сообщение:

Symfony \ Component \ DependencyInjection \ Exception \ InactiveScopeException: вы не можете создать службу («запрос») неактивной области («запрос»).

И я не могу найти способ решить эту проблему. У кого-то есть идея?

Моя версия Symfony является 2.2.1 и моя версия PHPUnit является 3.7.19

Если кто-то может помочь мне, я мог бы быть очень счастлив.

Прошу прощения, если мой английский не так хорош.



EDIT
Может быть, это может помочь кому-то, в службе я использовал это::

 $request = $this->container->get('request'); 

Казалось бы, причина, почему работа dosen't, когда я удалить его, он Безразлично «Я говорю об ошибке, но они все еще не работают.



EDIT @Cyprian Согласно вам есть изменить мой код для того, что я хочу. Так я просто добавить к моей службе, в функции, которую я хочу, клиент (клиент веб-тест случае), а затем внутри функции я просто добавить:

if (isset($client)) { 
     $request = $client->getRequest(); 
    } else { 
     $request = $this->container->get('request'); 
    } 

Так что в моей функции, где я называю обслуживание я только это:

public function getObject($id) 
{ 
    //Get the service from the kernel 
    $service = static::$kernel->getContainer()->get('service'); 
    $object = $service->getObject($id, $this->client); 
} 

и она отлично работает как этот

@nifr Ваша идея не работает для меня, но я думаю, что ваша идея была не так, они просто не работает в моем случае

Однако Спасибо за вашу помощь, я счастлив я в настоящее время работаю, и я ожидаю, что пост может помочь кому-то еще

ответ

0

Попробуйте получить запрос от клиента, а не обслуживать контейнер:

$request = $this->client->getRequest(); 

Таким образом, вы также можете получить ядро ​​и/или контейнер:

$kernel = $this->client->getKernel(); 
$container = $this->client->getContainer(); 

Еще один полезный совет: ядро ​​из клиент перезагружается между двумя запросами. Так, например, если вы передадите свой макет в контейнер клиента и выполните какой-либо запрос, в следующем запросе (после первого) контейнер не будет содержать ваш макет.

+0

в соответствии с вашей идеей с некоторым обновлением, это работает для меня – Babou34090

0

Там нет запроса доступен в PHPUnit до тех пор, пока вы не построить один.

Если вы хотите протестировать запрос. создайте его вот так:

use Symfony\Component\HttpFoundation\Request; 

protected $request; 

public function setUp() 
{ 
    // ... 
    $this->request = new Request(); 
    // ... modify your request acccording to your needs 
} 

и добавьте/вызовите сеттер в своей службе, используя запрос.

$service = $this->kernel->getContainer()->get('your_service') 
$service->setRequest($this->request); 

или создать Functional Test с WebTestCase.

+0

Фактически, я уже использую функциональный тест. Я имею в виду, мне нужно использовать его для получения значения из веб-службы для проверки с помощью моего теста. И я уже расширяю WebTestCase, поэтому у меня есть клиент . Я проверю вашу идею на setRequest. Вы имели в виду это http://symfony.com/doc/2.0/components/http_foundation/introduction.html ??? – Babou34090

+0

=> Как я говорю в редактировании, не работает для меня, но не обязательно неправильно благодарит за вашу помощь – Babou34090

Смежные вопросы