2015-08-27 4 views
2

J'écris un contrôleur comme celui-cicomment tester Rediriger à FuelPHP

public function action_submit() 
{ 
$submit = Format::forge(json_decode($_POST["submit"]))->to_array(); 
Servicecode::add_code_request($submit); 
Response::redirect('code/codedetail'); 
} 

alors je veux écrire PHPUnit pour tester,

public function test_adminsubmit() 
{ 
$Submit = array(...); 
$_POST["Submit"] = json_encode(Submit); 
$response = Request::forge('code/codeeditrequest/submit') 
    ->set_method('POST') 
    ->execute() 
    ->response(); 
$this->assertContains('ode Detail', $response->body->__toString()); 

quelque chose de mal avec cela, il avait insérer les données DB, mais quand il a lancé redirection, je ne peux pas rediriger la page, donc le test a échoué! WHY? Quel est le problème avec ce ..

Répondre

2

Dans mon esprit, vous ne pouvez pas écrire un test comme ça.

Parce que Response::redirect() ne renvoie aucun contenu, mais renvoie uniquement l'en-tête HTTP pour la redirection et appelle exit(). Votre test de phpunit est donc annulé par le exit().

Pour tester le code avec Response::redirect(), vous devez remplacer la méthode Response::redirect() avec test double en quelque sorte.

+0

merci, vous avez résolu mes problèmes! – yang