Я пишу модульные тесты для своего приложения. Я написал функцию входа в систему для разных пользователей (для проверки пользовательских уровней) и функции для генерации действительных или недопустимых данных формы (для проверки моей обработки формы).«Невозможно установить идентификатор сеанса после запуска сеанса». при тестировании формы
Когда тест отправляет форму, он бросает исключение:
Uncaught PHP Exception LogicException: "Cannot set session ID after the session has started."
Я использую Symfony 2.6.4. Я не могу найти полезную информацию об этом сообщении об ошибке. Испытание работало отлично некоторое время назад.
class ControllerTest extends WebTestCase
{
public $client = null;
public $route = 'home/';
/**
* @var \Doctrine\ORM\EntityManager
*/
public $em;
public function setUp()
{
self::bootKernel();
$this->client = static::createClient();
$this->em = static::$kernel->getContainer()
->get('doctrine')
->getManager()
;
}
public function logIn($role = 'admin')
{
if ($role === 'admin') {
$userId = 20;
} elseif ($role === 'user') {
$userId = 29;
}
$user = $this->em->getRepository('Acme\DemoBundle\Entity\User')->find($userId);
$session = $this->client->getContainer()->get('session');
$firewall = 'main';
$token = new UsernamePasswordToken($user, $user->getPassword(), $firewall);
$session->set('_security_'.$firewall, serialize($token));
$session->save();
$cookie = new Cookie($session->getName(), $session->getId());
$this->client->getCookieJar()->set($cookie);
}
public function getFormData($valid = true)
{
//function to generate (in)valid formdata
}
public function getFormRequest($data, $url)
{
return $this->client->request(
'POST',
$url,
$data,
[],
[
'CONTENT_TYPE' => 'application/json',
'HTTP_X-Requested-With' => 'XMLHttpRequest',
]
);
}
//works OK
public function testNewScenario()
{
$url = $this->baseurl . 'new';
$this->logIn('admin');
$crawler = $this->client->request('GET', $url);
$this->assertEquals(200, $this->client->getResponse()->getStatusCode(), "Unexpected HTTP status code for GET " . $url);
}
public function testValidNewScenario()
{
$this->logIn('admin');
$validData = $this->getFormData(true);
//this function throws the exception
$this->getFormRequest($validData, $this->baseurl);
$this->assertEquals(200, $this->client->getResponse()->getStatusCode(), "Unexpected HTTP status code for POST " . $this->baseurl);
}
}
Вот соответствующая часть моей config_test.yml:
framework:
test: ~
session:
storage_id: session.storage.mock_file
profiler:
collect: false
Что происходит?
Я не уверен, но похоже, что вам нужно выйти из системы, прежде чем войти в систему как пользователь. – Vick
Вероятно, пользовательский идентификатор, который вы ищете, как изменился? – Matteo
@Matteo Нет, не изменился. –