Тестирование Zend-контроллеров с сеансами в одном экземпляре - PullRequest
3 голосов
/ 03 июня 2011

Я пытаюсь использовать Zend_Test_PHPUnit_ControllerTestCase в моем тестировании и испытываю трудности.

Загрузчик моего приложения создает экземпляр библиотечного класса, который управляет доступом к пространству Zend_Session_Namespace с именем «LiveData».LiveData поддерживает массивы данных для текущего пользователя, текущей организации и т. Д. После создания экземпляра объект LiveData сохраняется в реестре.

Когда я создаю экземпляр LiveData, я устанавливаю singleInstance = true, т.е.new Zend_Session_Namespace('LiveData', true) Это поможет избежать путаницы в отношении того, кто что делает с LiveData.

В любом случае, это работает нормально.Я просматриваю сайт, вход в систему, выход из системы и т. Д., И мои данные сеанса ведут себя так, как я ожидал.

Однако при попытке выполнить тестирование я получаю сообщение «Объект пространства имен сеанса уже существует для этого пространства имен».

Мои тесты загружаются в каждый тестовый файл следующим образом:

public function setUp()
{
    $this->bootstrap = new Zend_Application(APPLICATION_ENV, 
            APPLICATION_PATH . '/configs/application.ini');
    parent::setUp();
}

Это были стандартные леса, размещаемые там Netbeans.Читая документацию Zend_Test, мне кажется, что это нормально.

Проблема возникает, когда я отправляю контроллер в тесте следующим образом:

public function testIndexIsDefaultAction()
{
    $this->dispatch('/');

    // assertions
    $this->assertController('Index');
    $this->assertAction('index');
}

Я думаю, что тест установлен) метод приводит к тому, что мое приложение запускается (и создает копию LiveData).Затем $this->dispatch('/') снова запускает бутсрап ... Хотя я не могу представить, почему это так.(Почему мы хотим, чтобы он запускался дважды?) Если вы сможете пролить свет на мою судьбу, я был бы очень признателен!

1 Ответ

2 голосов
/ 03 июня 2011

Метод setUp() только сообщает Zend, как вызвать загрузчик, который выполняется, когда вы вызываете dispatch(). Однако ваш загрузчик будет запускаться для каждого метода тестирования. Поскольку вы говорите Zend запретить несколько экземпляров Zend_Session_Namespace с одним и тем же пространством имен, второй метод тестирования завершится неудачей.

Найдите в источнике Zend_Session_Namespace способ сброса флага. Если он существует, добавьте его в тестовый загрузчик, прежде чем вызывать загрузчик приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...