Я реализовал этот тест в своем приложении
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 в случае веб-тестирования?
Для отладочных тестов я всегда использую $ this-> assertContains ('StringForSureNotInResponse', $ client-> getResponse () -> getContent ()); Это покажет вам возвращенный HTML. Вы также можете поискать в var / logs / test.log 500, чтобы выяснить, что не так.
«Есть ли способ справиться с renderController» - не могли бы вы пояснить свое намерение? Вы хотите увидеть настоящую ошибку? Или издеваться над futureEvents?
Я нашел это. это из-за $this->getDoctrine()->getRepository(Event::class)->findAll();. Как я могу высмеять это в WebTestCase?
Какую фактическую ошибку вы получаете при выполнении этого метода?
На моей веб-странице нет ошибок. Я просто получаю эту ошибку в своем веб-тесте. Ошибка написана в моем посте. phpunit tests/Controller/HomeControllerTest.php > web/debugTest.html не дает мне дополнительной информации
фиктивные вызовы доктрины вполне возможны (хотя было бы лучше обернуть эту часть и вместо этого имитировать оболочку), просто создайте макет оболочки и поместите ее в контейнер в setUp тестового набора. Также возможно имитировать саму доктрину, но это не очень продуктивно, потому что вам нужно будет создать целую цепочку имитаций для всех этих ->getThis и ->getThat. Вы также можете выставлять исключения для целей тестирования - создайте ExceptionListener и просто повторно выбросите исключение, если не HttpException. Просто привяжите слушателя только в тестовом конфиге.






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