我正在运行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(),并且数组只包含我传入的两个内容,因此正确设置。
答案 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);