2015-04-03 3 views
2

Так спасибо Matteo (phpunit in symfony2 - No tests executed) Теперь я могу проверить свои функциональные тесты.symfony2 phpunit - ошибка функционального тестирования (host_with_path)

Теперь я получил следующее сообщение об ошибке при запуске 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 от версии 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. В качестве побочного эффекта эта ошибка была исправлена. Поэтому у меня не будет решения этой проблемы.

ответ

0

Проблема заключается в том, что объект 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 для возврата вида запроса вы хотите.