У меня есть настройка doctrine2 с ZF 1.11, я испытываю трудности с поиском лучшего способа для контроллеров юнит-тестирования. Я хотел бы иметь возможность тестировать действия в контроллерах без записи в базу данных в рамках моих модульных тестов, однако я считаю, что на самом деле это невозможно.
Например, скажем, у меня есть следующее гипотетическое действие в моем контроллере.
public function redirectUserAction() {
$registry = Zend_Registry::getInstance();
$em = $registry->entitymanager;
$user = $em->getRepository('Application_Model_User')
->findOneBy(array('email' => 'test@test.com'));
if(is_object($user)) {
$this->_redirect('/');
}
}
Я хочу проверить, что если есть пользователь, имеющий адрес электронной почты test@test.com, он будет перенаправлен на /, поэтому в данный момент у меня есть следующий тест.
public function testUserAvaliableShouldRedirectIndex() {
$registry = Zend_Registry::getInstance();
$em = $registry->entitymanager;
$user = new Application_Model_User();
$user->setEmail('test@test.com');
$em->persist($user);
$em->flush();
$this->dispatch('/index/redirect-user');
$this->assertRedirectTo('/');
$em->remove($user);
$em->flush();
}
Мне кажется, это очень грязный способ написания тестов. У меня сложилось впечатление, что с доктриной мне не нужно было бы на самом деле сбрасывать данные в базу данных, потому что мои объекты будут храниться в слое постоянства, но в настоящий момент мои тесты не проходят без очистки.
Если кто-нибудь знает лучший способ, которым я мог бы написать тесты, или может помочь мне понять, где я иду не так, я был бы очень благодарен.
Спасибо