Поблочное тестирование PHP с автором зенда и пехлеви ACL

У меня есть приложение, которое находится позади входа в систему и использует 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();

 }

Это, я нашел, все еще, кажется, перенаправляет назад к странице входа в систему, поскольку плагины не знают, что пользователь зарегистрирован.

Любая справка очень ценится.

10
задан Daniel Egeberg 28 July 2010 в 11:42
поделиться

1 ответ

Проблема, которую вы описываете, часто возникает при использовании глобальных переменных и глобальной переменной ООП (шаблон Singleton).

Есть статья автора PHPUnit, в которой описывается, как этого можно избежать с помощью внедрения зависимостей и какие другие возможности у вас есть, и, поскольку она очень информативна, я просто предлагаю вам ее прочитать :) http : //sebastian-bergmann.de/archives/882-Testing-Code-That-Uses-Singletons.html

В качестве уродливой альтернативы (если вам нужен быстрый результат) вы можете создать заглушку Zend_Auth (описание в link) и используйте API отражения PHP 5.3, чтобы установить переменную экземпляра Zend_Auth в свою заглушку.

Надеюсь, что это поможет (поскольку вопрос прожил 4 часа без другого ответа)

3
ответ дан 4 December 2019 в 02:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: