2010-03-23 6 views
2

J'utilise Zend_Test_PHPUnit_ControllerTestCase pour tester mes contrôleurs. Cette classe fournit différentes façons de tester la sortie rendue, mais je ne veux pas que mes scripts de vue soient impliqués. Je voudrais tester les vars de ma vue. Y at-il un moyen de accéder aux contrôleurs voir objet?Zend_Test_PHPUnit_ControllerTestCase: Paramètres de la vue de test et sortie non rendue

Voici un exemple, ce que je suis en train de faire:

<?php 
class Controller extends Zend_Controller_Action 
{ 
    public function indexAction() 
    { 
     $this-view->foo = 'bar'; 
    } 
} 

class ControllerTest extends Zend_Test_PHPUnit_ControllerTestCase 
{ 

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

     //doesn't work, there is no such method: 
     $this->assertViewVar('foo', 'bar'); 

     //doesn't work, end_Test_PHPUnit_ControllerTestCase has no getView method: 
     $this->assertEquals(
      'bar', 
      $this->getView()->foo 
     ); 

    } 
} 

Répondre

5

Si vous devez vraiment affirmer contre la vue, l'obtenir avec Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->view et affirmer contre elle. Cependant, l'objectif de Zend_Test est de vous opposer à la réponse réelle, en utilisant une requête xpath ou quelque chose de similaire. Cela vous permettra de tester complètement votre application, au lieu d'en faire partie. Si vous affirmez simplement que la vue contient un var et qu'elle est égale à une chose donnée, vous ne vérifiez pas vraiment qu'elle a été utilisée correctement.

+0

C'est une idée clé, +1 – chelmertz

0

1) Zend_Test_PHPUnit_ControllerTestCase::_resetPlaceholders() utilise le Singelton obtenu dans Zend_Registry::getInstance() et les recherches pour les espaces réservés. Peut-être que vous pourriez imiter ce comportement.

2) Avez-vous déjà essayé $view = Zend_Layout::getMvcInstance()->getView()? Je n'ai pas encore testé les contrôleurs, mais puisque les cas de test incluent des singeltons, peut-être que ce ne serait pas si loin.

+0

Aucune de ces solutions ne fonctionne. Le dispacheur désactive l'objet contrôleur après l'exécution de l'action, donc j'ai peur de devoir sous-classer le répartiteur. – erenon