在CodeIgniter单元测试中设置测试项目不影响报告输出

时间:2010-10-13 16:51:29

标签: php codeigniter

我正在运行CodeIgniter 2.0,我在索引函数中使用此代码设置了测试控制器。似乎无论我放在“set_test_items”变量中,报告都不会改变。它始终显示有关测试的所有可能信息。我觉得我必须错过这里明显明显的东西。我错过了什么?

    $this->unit->set_test_items(array('test_name', 'result'));

    $this->_test_user_lib();
    $this->_test_user_model();

    echo $this->unit->report();

此外,我只是在生成报告时尝试对可见项目进行var_dump(),并且数组只包含我传入的两个内容,因此正确设置。

3 个答案:

答案 0 :(得分:2)

set_test_items()仅影响run()方法,而不影响report()。以下代码仅显示您在set_test_items()中指定的项目:

echo $this->unit->run(1 + 1, 2, 'One plus one');

但以下内容将显示所有项目:

echo $this->unit->report();

希望这有帮助。

答案 1 :(得分:1)

您可以扩展 Unit_class 库来修复run方法。

以下是使用数组助手“elements”的示例,仅保留> _test_items_visible中的元素。

注意:这样,您必须设置可见项 BEFORE 运行测试。

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Unit_test extends CI_Unit_test 
{
  /**
   * Llamamos al constructor del padre 
   *
   */
  public function __construct()
  {
      parent::__construct();
  }


  /**
   * Reemplazamos la función RUN
   */
  function run($test, $expected = TRUE, $test_name = 'undefined', $notes = '')
  {
    // Sacamos la versión
    $CI =& get_instance();
    $CI->load->helper('array');


    if ($this->active == FALSE)
    {
      return FALSE;
    }

    if (in_array($expected, array('is_object', 'is_string', 'is_bool', 'is_true', 'is_false', 'is_int', 'is_numeric', 'is_float', 'is_double', 'is_array', 'is_null'), TRUE))
    {
      $expected = str_replace('is_float', 'is_double', $expected);
      $result = ($expected($test)) ? TRUE : FALSE;
      $extype = str_replace(array('true', 'false'), 'bool', str_replace('is_', '', $expected));
    }
    else
    {
      if ($this->strict == TRUE)
        $result = ($test === $expected) ? TRUE : FALSE;
      else
        $result = ($test == $expected) ? TRUE : FALSE;

      $extype = gettype($expected);
    }

    $back = $this->_backtrace();


    // Only visible elements
    $report[] = elements
    (
      $this->_test_items_visible, array 
      (
        'test_name'     => $test_name,
        'test_datatype' => gettype($test),
        'res_datatype'  => $extype,
        'result'        => ($result === TRUE) ? 'passed' : 'failed',
        'file'          => $back['file'],
        'line'          => $back['line'],
        'notes'         => $notes
      )
    ) ;

    $this->results[] = $report;

    return($this->report($this->result($report)));
  }
}

答案 2 :(得分:0)

而不是运行report()方法

echo $this->unit->report();

你可以运行result()方法:

echo $this->unit->result();

这将为您提供您选择但以原始数据格式(即关联数组)的项目,这可能更好,因为报告的格式不是很好。然后,您可以将它们加载到视图中并按照您希望的格式进行格式化:

$data['test_results'] = $this->unit->result();
$data['title'] = 'Pricing Test';
$this->load->view('header');
$this->load->view('tests/index', $data);