2013-03-17 3 views
3

parameters.yml:Как переписать семантическую конфигурацию Symfony2 для каждой среды?

time_limit:  8 

my_ui.yml:

my_ui: 
    time_limit: %time_limit% 

config.yml:

imports: 
    - { resource: my_ui.yml } 

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

Как переписать time_limit в мою тестовую среду?

Я пробовал загружать другой файл my_ui_test.yml в файл config_test.yml, но безрезультатно.

ответ

4

Выяснено: у вас должен быть один файл параметров на хост. Но мне нужны разные параметры для env на одном хосте.

parameters.yml:

parameters: 
    time_limit: 8 

my_ui.yml:

my_ui: 
    time_limit: %time_limit% 

config.yml:

imports: 
    - { resource: my_ui.yml } 

Это дает мне 8 в dev окр.

Затем параметры_test.YML:

parameters: 
    time_limit: 0 

config_test.yml:

imports: 
    - { resource: parameters_test.yml } 

Это дает мне 0 в test окр.

+1

Это на самом деле ответ на его вопрос, который разрешен и поощряется к stackoverflow. –

0

Лучшим способом, который я нашел, является создание собственной тестовой среды для тестирования. Это полностью отделено от среды prod/dev.

Вы можете изучить хороший пример этого подхода в пакетах Johann Schmidts. Я скопировал и адаптировал файл из JMSPaymentCoreBundle для моих проектов.

Другой подход - включить (и переопределить параметры prod и dev) в файле config_test.yml. Этот файл должен быть загружен только тестовым клиентом.

+0

Я пробовал переопределить значения в 'config_test.yml' напрямую и не работал. Можете ли вы объяснить больше? – Tjorriemorrie

+0

Пожалуйста, покажите тест, который не работает. И объясните, как вы его выполняете. – BetaRide

+0

Настройка среды разработки и тестирования в отдельности - это то, чего я надеюсь избежать. Из любопытства: как делается TDD с Symfony2? – Tjorriemorrie

1

Переопределите любой параметр в файле config_test.yml и убедитесь, что вы выполняете запросы к контроллеру app_test.php при выполнении функциональных тестов. Если контроллер не существует, скопируйте его из app_dev.php изменения

$kernel = new AppKernel('dev', true); 

в

$kernel = new AppKernel('test', true); 

Например, я использую Bcrypt кодировщик пароль, который вызывает пароли должны быть закодированы в течение 1-2 секунд каждый раз , Это не приемлемо для испытаний, поэтому я переопределять стоимость до минимального значения в config_test.yml для ускорения испытаний:

security: 
    encoders: 
     Elnur\Model\User: 
      algorithm: bcrypt 
      cost: 4 

Таким образом, в производстве стоимость будет 14, но в тестировании только 4.

+0

Я не уверен, что следую необходимости в другом ФК. Запуск 'bin/phpunit' правильно устанавливает env в' test'? – Tjorriemorrie

+1

Зависит от того, выполняете ли вы модульное или функциональное тестирование. Если тесты являются функциональными, вам нужно делать запросы к переднему контроллеру, а фронт-контроллеру лучше быть 'app_test.php', который настроен для среды' test'. И если вы проводите модульное тестирование, вы вообще не должны заботиться об окружающей среде. –

+0

@ElnurAbdurrakhimov Где вы установили значение prod тогда, внутри config_prod или оно все еще в безопасности? – PeterFour

Смежные вопросы