Когда я запускаю тест 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.