Мой подписчик зарегистрирован в /config/services.yaml как таковой:
Код: Выделить всё
services:
...
App\EventListener\LoginSubscriber:
tags: [ name: kernel.event_subscriber ]
Моя проблема возникает при тестировании. Если я вызываю вход в систему $client->loginUser($user), то мой LoginSubscriber никогда не вызывается, из-за чего последующие запросы не работают должным образом, поскольку у них нет правильной настройки данных сеанса в LoginSubscriber.
Чтобы обойти эту проблему, я изменил свой тест на вход пользователя в систему вручную, пройдя весь процесс:
Код: Выделить всё
class FullSearchTest extends WebTestCase
{
public function testPartialSearchRequiresThreeCharacters(): void
{
$client = static::createClient();
$crawler = $client->request('GET', '/');
$form = $crawler->selectButton('SIGN IN')->form([
'_username' => 'admin',
'_password' => 'password',
]);
$client->submit($form);
$client->followRedirects();
$client->request('GET', '/search', [
'firstName' => 'fo',
]);
$this->assertResponseIsUnprocessable();
}
}
Для маршрута/поиска требуется ROLE_USER, поэтому они должны быть зарегистрированы in. Однако мой тест не удался, потому что ответ 200 OK, а внутри вывода отображается HTML-код страницы входа в систему, а не содержимое /search.
Если я изменю $this->assertResponseIsUnprocessable(); to $this->assertResponseRedirects('/'); то это также завершается неудачей, поскольку на самом деле не происходит перенаправление на страницу входа. Если я изменю свой тест, удалив шаг входа в систему, перейду прямо к /search и вызову $this->assertResponseRedirects('/');, тогда тест пройдет. Поэтому я не уверен, что проблема в том, что пользователь не вошел в систему, а скорее в том, что данные ответа/запроса застревают при входе в систему, а не меняются на последующий запрос/поиск, несмотря на $client->followRedirects() ; установлен.
Думаю, у меня вопрос: есть ли способ заставить $client->loginUser($user); запускать LoginSubscriber, а если нет, Есть ли способ обойти мой ручной вход в систему, чтобы вернуть статус ответа/данные последующих запросов, например /search в данном случае.
Подробнее здесь: https://stackoverflow.com/questions/792 ... around-not
Мобильная версия