Установка тестовых элементов в CodeIgniter Unit Test не влияет на вывод отчета - PullRequest
0 голосов
/ 13 октября 2010

Я использую 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 ]

2 голосов
/ 21 марта 2011

set_test_items() влияет только на методы run(), а не report(). Следующий код покажет только те элементы, которые вы указали в set_test_items():

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

Но следующее покажет все предметы:

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

Надеюсь, это поможет.

1 голос
/ 06 августа 2011

Вы можете расширить библиотеку Unit_class , чтобы исправить метод запуска.

Ниже приведен пример использования помощника массива "elements" для сохранения только элементов в> _test_items_visible.

Примечание: Таким образом, вы должны установить видимые элементы ДО запустить тесты.

<?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)));
  }
}
0 голосов
/ 22 июля 2015

Вместо запуска метода 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...