У меня есть приложение, которое находится позади входа в систему и использует zend_acl и zend_auth.
Во время предварительной отправки у меня есть плагин ACL, который создает все правила для ACL. У меня также есть Подлинный плагин, который проверяет, зарегистрированы ли Вы или не и раз так если у Вас есть доступ к требуемому ресурсу согласно ACL.
Поскольку приложение находится полностью позади входа в систему, ACL только создается, если Вы зарегистрированы.
Поблочное тестирование это, кажется, невозможно, или скорее более вероятно, я пропускаю что-то очевидное.
В моем методе установки модульного теста я моделирую успешный вход в систему, который возвращает zend_auth экземпляр. Тесты, которые действительно передают, указывают, что этот вход в систему был успешен.
Однако, если я затем через тесты пытаюсь отправить другому местоположению или оценить, если у зарегистрированного пользователя есть доступ к данному ресурсу, это всегда отклоняется плагином, поскольку они все еще не зарегистрированы. Я не уверен, почему это, кто-либо может советовать?
Например, это передает:
public function testLoggedIn()
{
$this->assertTrue( Zend_Auth::getInstance()->hasIdentity() );
}
Это перестало работать, поскольку это отклоняется плагином:
public function testUserAccess()
{
$this->dispatch('/home');
$this->assertResponseCode(200);
$this->assertQueryContentContains('#nav_side');
$this->resetRequest()
->resetResponse();
}
Это, я нашел, все еще, кажется, перенаправляет назад к странице входа в систему, поскольку плагины не знают, что пользователь зарегистрирован.
Любая справка очень ценится.
Проблема, которую вы описываете, часто возникает при использовании глобальных переменных и глобальной переменной ООП (шаблон Singleton).
Есть статья автора PHPUnit, в которой описывается, как этого можно избежать с помощью внедрения зависимостей и какие другие возможности у вас есть, и, поскольку она очень информативна, я просто предлагаю вам ее прочитать :) http : //sebastian-bergmann.de/archives/882-Testing-Code-That-Uses-Singletons.html
В качестве уродливой альтернативы (если вам нужен быстрый результат) вы можете создать заглушку Zend_Auth (описание в link) и используйте API отражения PHP 5.3, чтобы установить переменную экземпляра Zend_Auth в свою заглушку.
Надеюсь, что это поможет (поскольку вопрос прожил 4 часа без другого ответа)