Как исправить ошибку «Невозможно создать службу (« запрос ») из неактивной области (« запрос »)» при использовании php-модуля для тестирования » - PullRequest
0 голосов
/ 12 января 2019

Когда я запускаю тест php-unit, я получаю следующую ошибку:

You cannot create a service (“request”) of an inactive scope (“request”).

Это мешает мне правильно тестировать мой код, и я хотел бы иметь возможность протестировать мой код. Я на Symfony 2.8 с PHP 5.6.

Я нашел несколько ответов на StackO, которые предлагают добавить эти строки в:

protected function initializeContainer() {
    parent::initializeContainer();
    if (PHP_SAPI == 'cli' &&  $this->getEnvironment() != 'test') {
        $this->getContainer()->enterScope('request');
        $this->getContainer()->set('request', new \Symfony\Component\HttpFoundation\Request(), 'request');
    }
}

Я добавил это к AppKernel.php, но я все еще получаю эту ошибку в моем тесте. Вот setUp() и первый тест.

class HelperTest extends WebTestCase
{

  private $helper;

  public function setUp() {
    $this->client = static::createClient(array(), array(
      'PHP_AUTH_USER' => 'email@address.com',
      'PHP_AUTH_PW'   => 'not_the_real_password_obvi',
    ));

    $container = $this->client->getContainer();
    $this->helper = $container->get('Helper');
  }

  /*
    Tests for daysToBirthdayFromNow() function;
  */

public function testDaysUntilBirthdayIs270() {

    $birthdayTimestamp = 1514764800; // 1 January 2018
    $currentTimestamp = 1538132400; // 28 September 2018

    $daysToBirthday = intval($this->helper->daysToBirthdayFromNow($birthdayTimestamp, $currentTimestamp));

    $this->assertTrue($daysToBirthday == 270);
  }

Это вызывает daysToBirthdayFromNow(), внутри которого я вызываю другую вспомогательную функцию с именем convertTimestampToTimezone(). Тест падает в этой функции в этой строке кода:

$timezoneSetting = $this->getClub()->s('timezone');

Я выгрузил $this->getClub(), и он вылетает с сообщением об ошибке, которое есть в заголовке этого поста. Любые тесты, которые не требуют $this->, работают нормально.

Кто-нибудь преодолел эту проблему? Насколько я знаю, это проблема, которую моя команда разработчиков, в которой я работаю, не смогла решить, так как они начали использовать Symfony.

1 Ответ

0 голосов
/ 12 января 2019

Я исправил это после консультации с несколькими другими источниками. Вот исправление для всех, кто интересуется:

Добавьте эту функцию в класс AppKernel:

protected function initializeContainer() {
    parent::initializeContainer();
    if (PHP_SAPI == 'cli' &&  $this->getEnvironment() != 'test') {
        $this->getContainer()->enterScope('request');
        $this->getContainer()->set('request', new \Symfony\Component\HttpFoundation\Request(), 'request');
    }
}

И вверху моего тестового файла:

class HelperTest extends WebTestCase
{

  private $helper;

  public function setUp() {
    $this->client = static::createClient(array(), array(
      'PHP_AUTH_USER' => 'your@email.com',
      'PHP_AUTH_PW'   => 'your_password',
    ));

    $container = $this->client->getContainer();
    $container->enterScope('request');
    $container->set('request', new Request(), 'request');

    $this->helper = $container->get('Helper');
  }

  public function tearDown() {
    $container = $this->client->getContainer();
    $container->leaveScope('request');
  }
  // Your tests go below here

YMMV, но это работает для меня (наконец-то!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...