Невозможно изменить константы при написании тестов Behat для PHP-кода

У меня есть библиотека на основе PHP, которая берет телефонные номера и переводит их в соответствующие локально форматы отображения. (Например, американский номер телефона 14083493300 становится 1 (408) 349-4993)

Код является частью нашей офисной телефонной системы, которая имеет физический сервер в каждом офисе. На каждом сервере определен набор констант, определяющих, какие местные обычаи должна использовать библиотека: код страны, префикс внешней строки, длина локального расширения и т. д. В производственной среде это не вызывает никаких проблем, поскольку эти константы никогда не меняются во время выполнения.

Но библиотека довольно громоздкая, и мы просим не-разработчиков редактировать ее, поэтому я хочу представить BDD, чтобы мы могли документировать, что она должна делать, и следить за регрессиями.

Первый тестовый набор с использованием Behat работает как шарм; настроил все константы для одного региона, прогнал кучу тестов, хорошо. Но когда Бехат загружает следующий файл .feature, описывающий другой регион с другими значениями тех же констант, PHP ругается.

Я могу просто вручную запустить Behat отдельно для каждого файла .feature, но есть ли лучший обходной путь? Что-то, что заставляет Behat очищать постоянное пространство перед загрузкой следующего файла Feature?


person Jeremy Wadhams    schedule 12.03.2012    source источник
comment
misko.hevery.com/2009/10/28/   -  person kirilloid    schedule 13.03.2012


Ответы (2)


Невозможно переопределить константу в PHP. Поскольку все функции выполняются в одном процессе PHP, вы не можете сделать это за один проход.

Решение может запускать их отдельно, как вы сами предложили. Должно быть довольно легко реализовать скрипт, который найдет все файлы функций и запустит их.

Вы также можете попробовать запустить код, который определяет константы как отдельный процесс с помощью system(), захватить его вывод с помощью ob_start()+ob_get_contents() и проверьте его на своих шагах. Конечно, это зависит от того, как построен ваш код.

person Jakub Zalas    schedule 27.03.2012
comment
Я боялся этого. Спасибо! - person Jeremy Wadhams; 29.03.2012

Я думаю, вы можете сбросить или очистить наши константы, как хотите, с помощью хука @AfterFeature.

Ознакомьтесь с документацией по этому поводу: http://docs.behat.org/guides/3.hooks.html

person Cédric Mourizard    schedule 22.03.2012