2016-06-06 7 views
0

У меня есть следующий базовый деваха для испытаний контроллера:WebTestCase терпит неудачу после Silex 2 обновления

public function createApplication() { 
    include __DIR__ . '../web/index_dev.php'; 

    $app['debug'] = true; 
    $app['session.test'] = true; 
    $app['helper'] = function ($app) { 
      return new TestHelper($app); 
    }; // fails!! 

    return $app; 
    } 

    public function setUp() { 
    parent::setUp(); 

    $this->client = parent::createClient(); 
} 

В Silex 1.3 работала нормально, но после обновления для v2 она не на отмеченной линии. Как только я прокомментирую это - все в порядке.

UPD # 1: Я понял, почему это не удается: Cannot override frozen service "helper". Я понимаю смысл ошибки, но не могу понять, как ее исправить. Это тестовый пример, поэтому мне нужно заменить его ложным/тестовым выполнением объекта, но не может.

ответ

0

Ваша проблема в обновлении контейнера Pimple. The Pimple version of Silex 2 freezes services once you get them.

Итак, ваша проблема заключается в том, что вы получаете услугу «помощник» ранее в своем коде. Вы должны реорганизовать свой код, чтобы вы не получали эту услугу при загрузке вашего приложения.

+1

Привет, спасибо за ваш ответ. На самом деле, я получил его уже, вопрос в том, как рефакторировать прослушиватели событий, такие как '$ app-> error' или' $ app-> before'? Это часть процесса загрузки. Кроме того, каковы наилучшие методы переопределения объектов во время тестов? – nKognito

+0

Я бы выбрал разные конфигурационные файлы в зависимости от среды (dev, prod, test). Сначала определите среду, а затем настройте сервисы на ее основе, например, официальный [Silex Skeleton] (https://github.com/silexphp/silex-skeleton). – mTorres