Как проверить на редирект в Slim 2 и PHPUnit? - PullRequest
0 голосов
/ 22 мая 2018

Я использую Slim 2 и PHPUnit и хочу проверить, что выполнение запроса GET к определенной конечной точке приводит к перенаправлению.Я попытался получить заголовки ответа, но они показывают 200, поскольку ответ - это правильно загруженная страница, на которую я перенаправлен.

Вот как работает перенаправление в приложении.По сути, если промежуточное ПО Slim Auth генерирует Unauthorized Exception, оно перенаправляет на страницу входа:

$app->error(function (\Exception $e) use ($app) {
    if ($e instanceof HttpUnauthorizedException) {
        return $app->redirectTo('/login');
    }
});

1 Ответ

0 голосов
/ 23 мая 2018

Если предоставленный вами фрагмент кода - это все, что вы хотите протестировать, я думаю, вам не обязательно проверять фактический объект ответа.Было бы достаточно написать тест, чтобы убедиться, что написанная вами функция обработки ошибок вызывает redirectTo('/login') из $app объекта, когда ему присваивается экземпляр HttpUnauthorizedException в качестве входного аргумента.Функция обработки ошибок является единственным модулем, который вы написали в этом фрагменте кода, остальные части (например, error и redirectTo методы из $app объекта) вызываются только в вашем коде, и вам не нужно писать какие-либотесты для них, поэтому я предлагаю не проверять реальный объект ответа, потому что в этом случае вы как-то тесно связываете тестовый код для функции обработки ошибок с методом redirectTo из среды Slim, и это не будет модульный тест больше.

Поэтому я предлагаю вам не писать функцию обработки ошибок как анонимную функцию, чтобы вы могли писать модульные тесты для этой конкретной функции.Затем вы можете написать для него тесты и использовать библиотеку, такую ​​как Mockery , чтобы предоставить для этой функции макетированный $app объект и с помощью Mockeyr (старые методы, такие как shouldRecieve или более новый allows метод), выможет убедиться в том, что redirectTo('/login') вызывается для этого смоделированного объекта, если ему передан экземпляр HttpUnauthorizedException.

Кроме того, этот вопрос представляется актуальным Тестирование модульной конечной точки Slim Framework

...