/ / cakephp: परीक्षण पुनर्निर्देशित - php, इकाई-परीक्षण, cakephp, phpunit

केकफ़्पी: परीक्षण रीडायरेक्ट - PHP, यूनिट-परीक्षण, केकेएफपी, phpunit

मैं अपने यूनिट टेस्ट कोड में पुनर्निर्देशन का परीक्षण करने की कोशिश कर रहा हूं। नियंत्रक कोड है:

public function redirection() {
$this->redirect(array("action" => "index"));
return ;
}

और परीक्षण कोड है:

public function testRedirection() {
$return_var = $this->testAction("/users/redirection", array("return"=>"vars"));
$results = $this->headers["Location"];
var_dump( $this->headers["Location"]);
}

और आउटपुट:

string(55) "http://localhost/var/www/html/cakephp/app/Console/users"

मेरा सवाल यह है कि मैं पूरे स्ट्रिंग "var / www / html / cakephp / app / Console" से कैसे छुटकारा पा सकता हूं, और दूसरा यह कि इसमें "इंडेक्स" क्यों नहीं है?

उत्तर:

जवाब के लिए 2 № 1

अपने नियंत्रक को कुछ इस तरह से संशोधित करें

public function redirection() {
return $this->redirect(array("action" => "index"));
}

कारण (पुस्तक उद्धृत)

जब परीक्षण कार्रवाई जिसमें पुनर्निर्देशित (और) होरीडायरेक्ट के बाद अन्य कोड आम तौर पर रीडायरेक्ट होने पर वापस लौटने का एक अच्छा विचार है। इसका कारण यह है कि परीक्षण में पुनर्निर्देशित () का मजाक उड़ाया जाता है, और सामान्य की तरह बाहर नहीं निकलता है। और आपके कोड से बाहर निकलने के बजाय, यह रीडायरेक्ट के बाद कोड चलाना जारी रखेगा। उदाहरण के लिए:

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
}
}

उपरोक्त कोड का परीक्षण करते समय, आप रीडायरेक्ट तक पहुंचने पर भी अधिक कोड को चलाएंगे। इसके बजाय, आपको कोड लिखना चाहिए:

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
}
}

इस मामले में // अधिक कोड निष्पादित नहीं किया जाएगा क्योंकि रीडायरेक्ट तक पहुंचने के बाद विधि वापस आ जाएगी।