Ответы пользователя по тегу PHPUnit
  • Как протестировать метод контроллера в Symfony5?

    glaphire
    @glaphire
    PHP developer
    Раньше с таким не сталкивалась, но есть момент в описании вопроса - просто сделать эхо контента и exit не выйдет, чтобы вывести файл нужно еще добавить заголовки контента, размер файла и способ вывода. Т.е. в таком виде как метод контроллера есть сейчас я не понимаю, как он может корректно работать)
    Даже если без доработок, то для предотвращения вывода контента файла в консоль достаточно использовать ob_start() и ob_get_clean().

    Доработала пример:
    Контроллер:
    <?php
    
    namespace App\Controller;
    
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\HttpFoundation\BinaryFileResponse;
    use Symfony\Component\Routing\Annotation\Route;
    
    class TestController extends AbstractController
    {
        /**
         * @Route("/get-image", name="get_image")
         */
        public function getImage()
        {
            $path = "/home/dariia/Code/sf5_http_kernel_course/public/uploads/article_image/lightspeed-5f687f2402b6f.png";
    
            $response = new BinaryFileResponse($path);
    
            return $response;
        }
    }


    Тест:
    <?php
    
    namespace App\Tests\Controller;
    
    use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
    
    class TestControllerTest extends WebTestCase
    {
        public function testRegister()
        {
            $client = static::createClient();
            ob_start();
            $client->request('GET', '/get-image');
            $client->getResponse()->sendContent();
            $this->assertResponseIsSuccessful();
            $this->assertResponseHeaderSame('Content-Type', 'image/png');
            ob_get_clean();
    ...

    Дальше можно добавить ассерты на тему размера файла, имени и т.д., просто нужно иметь какую-то привязку к файлу, чтобы этими данными манипулировать, а я упростила пример)
    Ответ написан
    5 комментариев
  • Какую литературу посоветуете по тестированию?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    TDD Кента Бека - помогает понять, откуда взялась популярная архитектура фреймворков тестирования (ссылка) - читала, мне частично помогла.
    xUnit test patterns - не читала, но все советуют - тоже объясняет принципы написания тестов без четкой привязки к технологии (ссылка).
    По разнице в подходах тестирования - существует пирамида тестирования, но на практике мне не всегда понятно, где границы - приемочные и UI тесты ориентированы на use cases - т.е. на путь - в какой последовательности юзер проходит фичу и какой результат ожидает на каждом шаге (заходит на страницу, заполняет данные, ждет ответа; программа-клиент получает токен, шлет запрос, ждет респонс), а модульные тесты ориентированы на проверку кода как изолированных элементов - т.е. тестирование происходит отдельно от общего процесса, в котором этот код используется, чтобы можно было локализовать проблему с максимальной точностью.
    PHPUnit я изучала только по документации, просто прошлась по всем примерам, считаю приемлемым вариантом изучения. Лучше сначала хорошо понять PHPUnit, а потом учить Codeception. Учиться, как мокать и стабать, можно уже на конкретных задачах, по мере надобности.
    Ответ написан
    1 комментарий