Snažím sa viazať na testovanie presmerovania v mojom testovacom kóde jednotky. Kód kontrolóra je:
public function redirection() {
$this->redirect(array("action" => "index"));
return ;
}
a testovací kód je:
public function testRedirection() {
$return_var = $this->testAction("/users/redirection", array("return"=>"vars"));
$results = $this->headers["Location"];
var_dump( $this->headers["Location"]);
}
a výstup:
string(55) "http://localhost/var/www/html/cakephp/app/Console/users"
Moja otázka znie, ako sa môžem zbaviť celého reťazca „var / www / html / cakephp / app / Console“, a za druhé, prečo v ňom nie je „index“?
odpovede:
2 pre odpoveď č. 1Upravte ovládač na niečo podobné
public function redirection() {
return $this->redirect(array("action" => "index"));
}
Dôvodom je (citácia knihy)
Pri testovaní akcií, ktoré obsahujú presmerovanie () apo presmerovaní je zvyčajne vhodné vrátiť sa pri presmerovaní. Dôvodom je to, že presmerovanie () je v testovaní zosmiešňované a nevykonáva sa ako obvykle. Namiesto ukončenia vášho kódu bude kód naďalej presmerovávať. Napríklad:
class ArticlesController extends AppController {
public function add() {
if ($this->request->is("post")) {
if ($this->Article->save($this->request->data)) {
$this->redirect(array("action" => "index"));
}
}
// more code
}
}
Pri testovaní vyššie uvedeného kódu budete stále používať // ďalší kód, aj keď je dosiahnuté presmerovanie. Namiesto toho by ste mali napísať kód ako:
class ArticlesController extends AppController {
public function add() {
if ($this->request->is("post")) {
if ($this->Article->save($this->request->data)) {
return $this->redirect(array("action" => "index"));
}
}
// more code
}
}
V tomto prípade // ďalší kód nebude vykonaný, pretože metóda sa vráti po dosiahnutí presmerovania.