Как правильно составить тест для phpunit и json_encode()?

Здравствуйте,
Нужна помощь. Начал осваивать автоматические тесты и читая документацию и составляя тест, не могу решить проблему. Есть у меня код, который отвечает за проверку прав пользователя и в случае если прав не хватает, выводит на экран страницу ошибки, в адресной строке при этом остается набранный адрес (то есть нет перенаправления на 404):

static function check() {
if(self::isAjax()) {
			echo json_encode(array("respons"=>"Ошибка", "status"=>"error"));
			exit;
		}
.......
}


Если запрос пришел через ajax отрабатывает код выше, если страница открывается в браузере, то отображается соответствующий шаблон.

Сам тест:

<?php
declare(strict_types=1);

use PHPUnit\Framework\TestCase;

final class permissionTest extends TestCase
{

    public function test_permission()
    {
      check();
   }
}


Проблема в том, что при вызове теста в консоле, я получаю в нем выхлоп такого вида:

phpunit --bootstrap config.php .
PHPUnit 6.1.4 by Sebastian Bergmann and contributors.

...........{"respons":"Ошибка","status":"error"}


Как мне правильно обработать ответ и составить тест?
  • Вопрос задан
  • 209 просмотров
Решения вопроса 1
@MadridianFox
Web-программист, многостаночник
Всё просто - не надо в функции проверки прав печатать ответ.
Более того, функция проверки прав не должна ничего знать про то - под аяксом она запускается или нет. Она должна просто проверять и возвращать результат (bool, текст ошибки, код ошибки, что угодно), а уже где-то в контроллере (это такое место, где вы получаете данные http запроса, решаете что делать и формируете http ответ) вы должны превращать результат в ответ.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
Бюро Цифровых Технологий Санкт-Петербург
от 120 000 до 180 000 ₽
03 мая 2024, в 21:24
400 руб./за проект
03 мая 2024, в 21:00
5000 руб./за проект
03 мая 2024, в 20:41
15000 руб./за проект