Как подделать HTTP_USER_AGENT в тесте прослушивателя Symfony2?

У меня есть прослушиватель, который ведет себя по-разному в зависимости от HTTP_USER_AGENT:

        if ($request->server->get('HTTP_USER_AGENT') == $this->zabbixUserAgent) {
VisitorHolder::set($visitor);
} else {
VisitorHolder::set($this->visitorService->persist($visitor));
}

Я хочу избежать сохранения всех запросов Zabbix в нашей базе данных. Это прекрасно работает, но как я могу подделать пользовательский агент в моем модульном тесте, чтобы мои тесты охватывали этот случай?

Создание нового запроса и установка там пользовательского агента полностью игнорируются:

    $this->currentRequest = new Request(
[], // GET parameters
[], // POST parameters
[], // request attributes (parameters parsed from the PATH_INFO, ...)
[], // COOKIE parameters
[], // FILES parameters
['HTTP_USER_AGENT' => 'zbx'], // SERVER parameters
null // raw body data
);

$this->requestStack
->expects($this->any())
->method('getCurrentRequest')
->willReturn($this->currentRequest);

Var_dump в модульном тесте говорит мне, что мой пользовательский агент все еще нулевой, и мой случай не покрыт.
Любая идея, как я могу установить пользовательский агент для этого случая?

0

Решение

Если вы извлекли фактическую проверку в функцию в другом месте класса, вы можете затем смоделировать или иным образом переопределить эту проверку в классе и сохранить ее как модульный тест, который вообще не должен подделывать HTTP-запрос.

Для полных интеграционных тестов: если вы извлекли фактическую проверку в отдельную службу, то вы можете переопределить проверку с помощью разностной конфигурации в файле config_test.yml и использовать другую копию службы, которая всегда сообщит о ложном в тесте. среда.

# config_test.yml file:
app_zabbix_detect.detector:
class: AppBundle\Services\ZabbixDetectorAlwaysFalse

В основном файле это будет

# config.yml file: (or services.yml)
app_zabbix_detect.detector:
class: AppBundle\Services\ZabbixDetector # real test
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector