Ik ben laatst PHPUnit tegen gekomen voor het unittesten, dit leek me zeer interessant en ben er maar eens ingedoken.
Mijn vraag is redelijk specifiek, dus ik hoop dat iemand me een schop in de goede richting kan geven.
Ik wil dus mijn MVC applicatie gaan testen met de Zend_Test extensie van het Zend Framework. Deze Zend_Test module maakt gebruik van PHPUnit wat ik geinstalleerd heb en wat functioneel is.
Nu heb ik in mijn IndexTest.php de volgende test:
Deze gaat prima en verwijst netjes naar de juiste controller en action. Deze wordt afgevangen door een Front controller plugin en de module/controller/action worden gewijzigd in het request opbject.
Maar als ik de loginAction aanroep op de usercontroller, dan zou deze moeten verwijzen naar de identifyAction, hiervoor wordt de redirector helper gebruikt.
Deze laatste test geeft een fout, er schijnt namelijk niet verwezen te worden naar een andere locatie.
Nu heb ik nog wat experimenten gedaan om het probleem te vinden:
Mijn vraag is redelijk specifiek, dus ik hoop dat iemand me een schop in de goede richting kan geven.
Ik wil dus mijn MVC applicatie gaan testen met de Zend_Test extensie van het Zend Framework. Deze Zend_Test module maakt gebruik van PHPUnit wat ik geinstalleerd heb en wat functioneel is.
Nu heb ik in mijn IndexTest.php de volgende test:
PHP:
1
2
3
4
5
6
| public function testCallWithoutActionShouldIdentifyUser() { $this->dispatch('/'); $this->assertController('user'); $this->assertAction('identify'); } |
Deze gaat prima en verwijst netjes naar de juiste controller en action. Deze wordt afgevangen door een Front controller plugin en de module/controller/action worden gewijzigd in het request opbject.
Maar als ik de loginAction aanroep op de usercontroller, dan zou deze moeten verwijzen naar de identifyAction, hiervoor wordt de redirector helper gebruikt.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| //In de loginAction $request = $this->getRequest(); if( !$request->isPost() ){ $this->_helper->redirector('identify'); } // render de view enzo.... //... //.. // Een andere test public function testNoPostDataLoginShowRedirect() { // Should redirect without post $this->dispatch('/user/login'); $this->assertRedirectTo('/user/identify'); } |
Deze laatste test geeft een fout, er schijnt namelijk niet verwezen te worden naar een andere locatie.
Nu heb ik nog wat experimenten gedaan om het probleem te vinden:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| // Alles getest met de Zend_Test...::assertRedirectTo functie // ... // Werkt public function index1Action(){ $this->_helper->redirector('identify'); } // Werkt niet public function index2Action(){ if( $this->_request->isPost() ){ $this->_helper->redirector('identify'); } // Do other stuff and render view } // Werkt public function index3Action(){ if( $this->_request->isPost() ){ $this->_helper->redirector('identify'); return null; } // Do other stuff and render view } // PHPUnit crasht en geeft resultaten van voorgaande tests, maar niet van de huidige. // ook wordt de test niet afgerond, want het resultaat overzicht wordt niet getoond (Geslaagd/Gefaald) public function index3Action(){ if( $this->_request->isPost() ){ $this->_helper->redirector->gotoSimpleAndExit('identify'); } // Do other stuff and render view } |
"Chaos kan niet uit de hand lopen"