Welcome to the Cookbook

loading...

4.7.11.1 Membuat pelapor ujian

Pelapor Ujian yang biasa adalah sangat minimal. Jika anda mahu output yang lebih baik untuk mengecap orang-orang, jangan risau, ia sebenarnya sangat mudah untuk extend.
Apa yang bahaya cuma anda perlu mengusik dengan kod teras Cake, iaitu /cake/tests/libs/cake_reporter.php.

Untuk menukar output ujian anda boleh tulis balik method dibawah:

paintHeader()
Paparkan sebelum ujian bermula.
paintPass()
Paparkan setiap kali kes ujian sudah dibuat. Gunakan $this->getTestList() untuk dapatkan satu array infomasi yang berkaitan dengan ujian tersebut, dan $message untuk dapatkan hasil ujian. Jangan lupa untuk memanggil parent::paintPass($message).
paintFail()
Paparkan setiap kali kes ujian sudah gagal. Jangan lupa untuk memanggil parent::paintFail($message).
paintFooter()
Paparkan apabila ujian sudah tamat, i.e. bila kesemua kes-kes ujian sudah dijalankan.

Kalau, sedang menjalankan paintPass dan paintFail, anda mahu sorokkan output ibunya, tutupkan panggilan didalam komen tag, seperti:

echo "\n<!-- ";
parent::paintFail($message);
echo " -->\n";
  1. echo "\n<!-- ";
  2. parent::paintFail($message);
  3. echo " -->\n";

Contoh cake_reporter.php ialah setup yang membuat satu table untuk memegang hasil-hasil ujian seperti berikut:

<?php
 /**
 * CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite>
 * Copyright 2005-2008, Cake Software Foundation, Inc.
 *								1785 E. Sahara Avenue, Suite 490-204
 *								Las Vegas, Nevada 89104
 *
 *  Licensed under The Open Group Test Suite License
 *  Redistributions of files must retain the above copyright notice.
 */
 class CakeHtmlReporter extends HtmlReporter {
 function CakeHtmlReporter($characterSet = 'UTF-8') {
 parent::HtmlReporter($characterSet);
 }
 
function paintHeader($testName) {
  $this->sendNoCacheHeaders();
  $baseUrl = BASE;
  print "<h2>$testName</h2>\n";
  print "<table style=\"\"><th>Res.</th><th>Test case</th><th>Message</th>\n";
  flush();
 }

 function paintFooter($testName) {
   $colour = ($this->getFailCount() + $this->getExceptionCount() > 0 ? "red" : "green");
   print "</table>\n";
   print "<div style=\"";
   print "padding: 8px; margin-top: 1em; background-color: $colour; color: white;";
   print "\">";
   print $this->getTestCaseProgress() . "/" . $this->getTestCaseCount();
   print " test cases complete:\n";
   print "<strong>" . $this->getPassCount() . "</strong> passes, ";
   print "<strong>" . $this->getFailCount() . "</strong> fails and ";
   print "<strong>" . $this->getExceptionCount() . "</strong> exceptions.";
   print "</div>\n";
 }

 function paintPass($message) {
   parent::paintPass($message);
   echo "<tr>\n\t<td width=\"20\" style=\"border: dotted 1px; border-top: hidden; border-left: hidden;                  border-right: hidden\">\n";
   print "\t\t<span style=\"color: green;\">Pass</span>: \n";
   echo "\t</td>\n\t<td width=\"40%\" style=\"border: dotted 1px; border-top: hidden; border-left: hidden; border-right: hidden\">\n";
   $breadcrumb = $this->getTestList();
   array_shift($breadcrumb);
   array_shift($breadcrumb);
   print implode("-&gt;", $breadcrumb);
   echo "\n\t</td>\n\t<td width=\"40%\" style=\"border: dotted 1px; border-top: hidden; border-left: hidden; border-right: hidden\">\n";
   $message = split('at \[', $message);
   print "-&gt;$message[0]<br />\n\n";
   echo "\n\t</td>\n</tr>\n\n";
 }
 
 function paintFail($message) {
   echo "\n<!-- ";
   parent::paintFail($message);
   echo " -->\n";
   echo "<tr>\n\t<td width=\"20\" style=\"border: dotted 1px; border-top: hidden; border-left: hidden; border-right: hidden\">\n";
   print "\t\t<span style=\"color: red;\">Fail</span>: \n";
   echo "\n\t</td>\n\t<td width=\"40%\" style=\"border: dotted 1px; border-top: hidden; border-left: hidden; border-right: hidden\">\n";
   $breadcrumb = $this->getTestList();
   print implode("-&gt;", $breadcrumb);
   echo "\n\t</td>\n\t<td width=\"40%\" style=\"border: dotted 1px; border-top: hidden; border-left: hidden; border-right: hidden\">\n";
   print "$message";
   echo "\n\t</td>\n</tr>\n\n";
 }
 
 function _getCss() {
   return parent::_getCss() . ' .pass { color: green; }';
 }
 
 }
 ?>
  1. <?php
  2. /**
  3. * CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite>
  4. * Copyright 2005-2008, Cake Software Foundation, Inc.
  5. * 1785 E. Sahara Avenue, Suite 490-204
  6. * Las Vegas, Nevada 89104
  7. *
  8. * Licensed under The Open Group Test Suite License
  9. * Redistributions of files must retain the above copyright notice.
  10. */
  11. class CakeHtmlReporter extends HtmlReporter {
  12. function CakeHtmlReporter($characterSet = 'UTF-8') {
  13. parent::HtmlReporter($characterSet);
  14. }
  15. function paintHeader($testName) {
  16. $this->sendNoCacheHeaders();
  17. $baseUrl = BASE;
  18. print "<h2>$testName</h2>\n";
  19. print "<table style=\"\"><th>Res.</th><th>Test case</th><th>Message</th>\n";
  20. flush();
  21. }
  22. function paintFooter($testName) {
  23. $colour = ($this->getFailCount() + $this->getExceptionCount() > 0 ? "red" : "green");
  24. print "</table>\n";
  25. print "<div style=\"";
  26. print "padding: 8px; margin-top: 1em; background-color: $colour; color: white;";
  27. print "\">";
  28. print $this->getTestCaseProgress() . "/" . $this->getTestCaseCount();
  29. print " test cases complete:\n";
  30. print "<strong>" . $this->getPassCount() . "</strong> passes, ";
  31. print "<strong>" . $this->getFailCount() . "</strong> fails and ";
  32. print "<strong>" . $this->getExceptionCount() . "</strong> exceptions.";
  33. print "</div>\n";
  34. }
  35. function paintPass($message) {
  36. parent::paintPass($message);
  37. echo "<tr>\n\t<td width=\"20\" style=\"border: dotted 1px; border-top: hidden; border-left: hidden; border-right: hidden\">\n";
  38. print "\t\t<span style=\"color: green;\">Pass</span>: \n";
  39. echo "\t</td>\n\t<td width=\"40%\" style=\"border: dotted 1px; border-top: hidden; border-left: hidden; border-right: hidden\">\n";
  40. $breadcrumb = $this->getTestList();
  41. array_shift($breadcrumb);
  42. array_shift($breadcrumb);
  43. print implode("-&gt;", $breadcrumb);
  44. echo "\n\t</td>\n\t<td width=\"40%\" style=\"border: dotted 1px; border-top: hidden; border-left: hidden; border-right: hidden\">\n";
  45. $message = split('at \[', $message);
  46. print "-&gt;$message[0]<br />\n\n";
  47. echo "\n\t</td>\n</tr>\n\n";
  48. }
  49. function paintFail($message) {
  50. echo "\n<!-- ";
  51. parent::paintFail($message);
  52. echo " -->\n";
  53. echo "<tr>\n\t<td width=\"20\" style=\"border: dotted 1px; border-top: hidden; border-left: hidden; border-right: hidden\">\n";
  54. print "\t\t<span style=\"color: red;\">Fail</span>: \n";
  55. echo "\n\t</td>\n\t<td width=\"40%\" style=\"border: dotted 1px; border-top: hidden; border-left: hidden; border-right: hidden\">\n";
  56. $breadcrumb = $this->getTestList();
  57. print implode("-&gt;", $breadcrumb);
  58. echo "\n\t</td>\n\t<td width=\"40%\" style=\"border: dotted 1px; border-top: hidden; border-left: hidden; border-right: hidden\">\n";
  59. print "$message";
  60. echo "\n\t</td>\n</tr>\n\n";
  61. }
  62. function _getCss() {
  63. return parent::_getCss() . ' .pass { color: green; }';
  64. }
  65. }
  66. ?>