SimpleTest с CodeIgniter - не будет определять файл - переменные умирают? - PullRequest
0 голосов
/ 25 июля 2010

Я пытаюсь использовать SimpleTest с CodeIgniter, используя код, предоставленный maroonbytes .Я использую LAMP и NetBeans 6.9.

Страница test.php загружается в моем браузере.У меня есть тест заглушки, который отображается в выпадающих списках.Когда я пытаюсь запустить его, я получаю 2 ошибки PHP:

Сообщение: include_once (/var/www/sparts3/main/tests/basic_test_v.php): не удалось открыть поток: такого файла нетили каталог

Сообщение: include_once (): не удалось открыть /var/www/sparts3/main/tests/basic_test_v.php для включения (include_path = '.: / usr / share / php: / usr /share / pear ')

Неправильный путь - basic_test_v.php находится в подпапке / tests / views .

Отладчик указывает на это в test.php :

function add_test($file, &$test)

По какой-то причине NetBeans не раскрывает значение $ file на этом этапе.Означает ли это, что он пустой?

Я уже перебил строку кода, потому что она позволяет мне пройти страницу Code 404 Not Found.казалось, что отладчик GET вызывал сбой валидатора.Поэтому я добавил свой критерий в своем невежественном способе (я уверен, что это должно быть обработанное исключение или что-то в этом роде):

if ($this->uri->uri_string == '' || $this->uri->uri_string == 'XDEBUG_SESSION_START')
    {   ...  }

Как я могу решить эту проблему?Кстати, это попытка решить мой другой пост , который я буду обновлять;казалось, лучше всего сделать это дискретным вопросом.


ОБНОВЛЕНИЕ 1: Я использовал надстройку веб-разработчика (Firefox) для экспериментов с записями POST.Я считаю, что они неправильно обрабатываются в коде.По-прежнему кажется, что NetBeans не хочет показывать некоторые строковые переменные во время отладки;это расстраивает.

ОБНОВЛЕНИЕ 2: Мне кажется, что обработка действительного кода останавливается в тот же момент, когда NetBeans перестает отображать переменные.Я перехожу через test.php .Я на полпути через функцию, add_test ($ file, & $ test) .Эта функция открывается оператором if;это хорошо заканчивается, и я вижу переменные.Затем новый оператор if:

if (file_exists($implementation))
{
    require_once ($implementation); ...

Как только я нахожусь на этой линии, происходят 2 вещи:

  1. Отображение переменных в NetBeans становится пустым, за исключением SuperGlobals
  2. Код ведет себя так, как будто $ реализация является пустой переменной

Я добавил оператор чуть выше этих строк:

$implementation = 'http://var/www/sparts3/main/tests/views/basic_test_view.php';

Это неничего не меняюВывод браузера одинаков независимо от того, использую я NetBeans / Xdebug или нет.

Так что это начинает выглядеть как сбой в обработке PHP.Они существуют?Я могу попробовать загрузить и попробовать из службы хоста - только для диагностических подсказок и безрадостно, потому что CI без возможности отладки меня не интересует.


ОБНОВЛЕНИЕ 3: Я попробовал все на ПК WAMP.Те же результаты браузера (плюс некоторые "устаревшие" ошибки, что-то связанное с PHP 4 против 5).Я думаю, что могу отлаживать на этом ПК (если Xdebug работает), но, похоже, нет особого смысла.

Ответы [ 2 ]

1 голос
/ 03 августа 2010

Переименовали ли вы basic_test_v.php в basic_test_view.php? код ожидает, что ваши файлы будут названы и сохранены правильно.

ОБНОВЛЕНИЕ 1 (да, мне скучно)

Я уже обработал строку кода потому что это дает мне пройти код 404 Страница не найдена. казалось отладчиком GET вызывал сбой валидатора. Поэтому я добавил критерий, в моем невежестве способ (я уверен, что это должно быть обработано исключение или что-то):

if ($this->uri->uri_string == '' || $this->uri->uri_string == 'XDEBUG_SESSION_START') {   ...  }

Как я могу решить это? Кстати, это попытка решить мою другой пост, который я буду обновлять; казалось, лучше всего сделать это дискретным вопрос.

«Правильное» решение этой проблемы: установите $config['uri_protocol'] = "AUTO"; на $config['uri_protocol'] = "PATH_INFO"; и $config['enable_query_strings'] = FALSE; до $config['enable_query_strings'] = TRUE; в config.php (прочитайте комментарий выше этих настроек, они очень полезны)

После более глубокого изучения test.php я могу сказать, что ваши тестовые файлы должны быть названы так:

% name% _% type% _test.php (где% type% является единственным)

, чтобы сделать его более понятным, приведем пример:

у нас есть приветствие контроллера, помещенное в файл welcome.php тест для этого контроллера должен называться welcome_controller _test.php и храниться в разделе tests / controllers /

Сценарий test.php пытается автоматически загрузить тестовый файл и тестовый файл. Но, на мой взгляд, это нужно исправить.

Я изменил функцию get_loader_id и add_test следующим образом

function get_loader_id($file, $type) {
   $loader_id = str_replace("_{$type}_test.php", "", basename($file));
   return $loader_id;
}
function add_test($file, &$test) {
   $implementation = '';
   if (preg_match('/_controller/', $file)) {
      $controller = get_loader_id($file, 'controller');
      $implementation = APPLICATION . 'controllers/' . $controller . '.php';
   } elseif (preg_match('/_model/', $file)) {
      $model = get_loader_id($file, 'model');
      $implementation = APPLICATION . 'models/' . $model . '_model.php';
   } elseif (preg_match('/_view/', $file)) {
      $view = get_loader_id($file, 'view');
      $implementation = APPLICATION . 'views/' . $view . '.php';
   } elseif (preg_match('/_helper/', $file)) {
      $helper = get_loader_id($file, 'helper');
      $implementation = APPLICATION . 'helpers/' . $helper . '.php';
   } elseif (preg_match('/_library/', $file)) {
      $library = get_loader_id($file, 'library');
      $implementation = APPLICATION . 'libraries/' . $library . '.php';
   }
   if (file_exists($implementation)) {
      require_once ($implementation);
   }
   $test->addFile($file);
}

если вы следуете соглашениям с именами файлов, все должно работать нормально (Я тестировал его на MacBook с Zend Server CE, xdebug, simpletest и netbeans 6.9)

0 голосов
/ 03 августа 2010

Если то, что вы пытаетесь загрузить, это представление, пытались ли вы использовать $this->load->view('basic_test_view');?

...