symfony2 phpunit — ошибка функционального тестирования (host_with_path)

Так что спасибо Маттео (phpunit в symfony2 — тесты не выполняются) Теперь я могу проверить свои функциональные тесты.

Теперь я получил следующую ошибку при запуске phpunit -c app:

 You must change the main Request object in the front controller (app.php)
in order to use the `host_with_path` strategy.

поэтому я изменил его в app.php, из:

$request = RequestFactory::createFromGlobals('host_with_path');

чтобы:

$request = Request::createFromGlobals();

Я также обновил свой swiftmailer-bundle с версии 2.3 до 5.4.0.
К сожалению, это не исправило мою ошибку.

а это мой ../app/config_test.yml

swiftmailer:
disable_delivery: true

Я что-то здесь упускаю?

Я не могу найти эту ошибку где-либо в Интернете. Кто-нибудь знает, как мне исправить эту ошибку?

После некоторых поисков я заметил, что app.php не был проблемой. Это был DefaultControllerTest.php. Ошибка может быть исправлена ​​удалением следующих строк из DefaultControllerTest:

        $crawler = $client->request('GET', '/hello/Fabien');

$this->assertTrue($crawler->filter('html:contains("Hello Fabien")')->count() > 0);

В связи с недавними разработками наша команда разработчиков решила прекратить использование Sonata. В качестве побочного эффекта эта ошибка была исправлена. Поэтому у меня не будет решения этой проблемы.

2

Решение

Проблема в том, что объект Client не использует ни app.php, ни app_dev.php.

Клиент создает запрос внутри. Так что это не будет запрос, который вам нужен.

Единственное решение, которое я вижу, это переопределить метод Symfony\Bundle\FrameworkBundle\Test\WebTestCase::createClient вернуть вашего собственного клиента. Этот клиент несет ответственность за создание фактического объекта запроса. Ниже приводится текущее поведение.

namespace Symfony\Component\HttpKernel;

use Symfony\Component\BrowserKit\Client as BaseClient;

class Client extends BaseClient
{
...
/**
* Converts the BrowserKit request to a HttpKernel request.
*
* @param DomRequest $request A DomRequest instance
*
* @return Request A Request instance
*/
protected function filterRequest(DomRequest $request)
{
$httpRequest = Request::create($request->getUri(), $request->getMethod(), $request->getParameters(), $request->getCookies(), $request->getFiles(), $request->getServer(), $request->getContent());
foreach ($this->filterFiles($httpRequest->files->all()) as $key => $value) {
$httpRequest->files->set($key, $value);
}
return $httpRequest;
}
...
}

Вы должны переопределить метод filterRequest вернуть вид запроса, который вы хотите.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]