Zend Framework API - как заставить приложение использовать другую базу данных при модульном тестировании? - PullRequest
0 голосов
/ 05 февраля 2012

В моем приложении есть модуль API, который представляет собой RESTful API - в основном набор общедоступных веб-сервисов.Я хочу протестировать мои веб-сервисы с помощью PHPUnit.Теперь проблема ...

Обычно мое приложение использует базу данных "dbname".Но при модульном тестировании с PHPUnit я бы хотел использовать базу данных "dbname_test" (которая, конечно, содержит тот же набор таблиц).

Каков наилучший способ для достижения этой цели?В моих тестовых случаях PHPUnit я использую Zend_Http_Client для отправки запросов в мой модуль API, а затем я утверждаю возвращенные ответы.

Спасибо.

1 Ответ

1 голос
/ 05 февраля 2012

Я бы поместил раздел тестирования в мой application.ini:

[production]
...
; Database.
resources.db.adapter = "PDO_MYSQL"
resources.db.params.host = "localhost"
resources.db.params.username = "user"
resources.db.params.password = "pass"
resources.db.params.dbname = "primary"

[testing : production]
resources.db.params.username = "test"
resources.db.params.password = "test"
resources.db.params.dbname = "testing"

Установите переменную окружения в моем .htaccess:

SetEnv APPLICATION_ENV testing

И убедитесь, что я загружаю правильные настройки:

defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
$application = new Zend_Application(
    APPLICATION_ENV,
    array('config' => array(
        APPLICATION_PATH . '/configs/application.ini',
        APPLICATION_PATH . '/configs/additional.ini',
    ))  
);

Другая идея

Условно установите переменную APPLICATION_ENV в .htaccess на основе удаленного IP-адреса и пользовательского агента.Если оба не совпадают, то используется производство.

SetEnv APPLICATION_ENV production

SetEnvIf       Remote_Addr 55\.55\.55\.555 APPLICATION_ENV=testing
SetEnvIfNoCase User-Agent  !PHPUNIT        APPLICATION_ENV=production
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...