Symfony PHPUnit WebTestCase с RenderController

Я реализовал этот тест в своем приложении

public function testHome()
{
    $client = static::createClient();
    $client->request('GET', '/');
    $this->assertEquals(200, $client->getResponse()->getStatusCode());
}

Это не удается из-за контроллера рендеринга в моей ветке

{% extends 'base-pages.html.twig' %}

{% block main %}
    <main>
        {{ render(controller('App\\Controller\\AppController::futureEvents')) }}
        {{ include('includes/popular-places.html.twig') }}
        {{ include('includes/news-event.html.twig') }}
        {{ include('includes/call-section.html.twig') }}
    </main>
{% endblock %}

Контроллер визуализировал:

public function futureEvents()
{
    $events = $this->getDoctrine()->getRepository(Event::class)->findAll();

    return $this->render('includes/events-home-list.html.twig', [
        'events' => $events,
    ]);
}

Ошибка:

There was 1 failure:

1) App\Tests\Controller\HomeControllerTest::testHome Failed asserting that 500 matches expected 200.

/var/www/html/app-web/tests/Controller/HomeControllerTest.php:15

Почему так случилось? Есть ли способ обработать renderController в случае веб-тестирования?

В чем собственно ошибка? поместите в свой тест следующее: $ client-> getResponse () -> getContent (); умереть; Затем запустите его с помощью phpunit tests / Controller / HomeControllerTest.php> web / debugTest.html, чтобы просмотреть результаты в выходном файле.

Jeroen 25.10.2018 08:55

Для отладочных тестов я всегда использую $ this-> assertContains ('StringForSureNotInResponse', $ client-> getResponse () -> getContent ()); Это покажет вам возвращенный HTML. Вы также можете поискать в var / logs / test.log 500, чтобы выяснить, что не так.

Vyctorya 25.10.2018 09:15

«Есть ли способ справиться с renderController» - не могли бы вы пояснить свое намерение? Вы хотите увидеть настоящую ошибку? Или издеваться над futureEvents?

xmike 25.10.2018 10:35

Я нашел это. это из-за $this->getDoctrine()->getRepository(Event::class)->findAll()‌​;. Как я могу высмеять это в WebTestCase?

Kevin 25.10.2018 15:18

Какую фактическую ошибку вы получаете при выполнении этого метода?

xabbuh 25.10.2018 15:24

На моей веб-странице нет ошибок. Я просто получаю эту ошибку в своем веб-тесте. Ошибка написана в моем посте. phpunit tests/Controller/HomeControllerTest.php > web/debugTest.html не дает мне дополнительной информации

Kevin 25.10.2018 15:58

фиктивные вызовы доктрины вполне возможны (хотя было бы лучше обернуть эту часть и вместо этого имитировать оболочку), просто создайте макет оболочки и поместите ее в контейнер в setUp тестового набора. Также возможно имитировать саму доктрину, но это не очень продуктивно, потому что вам нужно будет создать целую цепочку имитаций для всех этих ->getThis и ->getThat. Вы также можете выставлять исключения для целей тестирования - создайте ExceptionListener и просто повторно выбросите исключение, если не HttpException. Просто привяжите слушателя только в тестовом конфиге.

xmike 25.10.2018 17:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
7
470
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел это. Согласно этому документу: https://symfony.com/doc/current/testing/database.html#changing-database-settings-for-functional-tests

Вам нужно добавить env в раздел php вашего phpunit.xml.dist.

<env name = "DATABASE_URL" value = "mysql://root:root@localhost/app" />

Другие вопросы по теме