Simpleetest с Codeigniter - не идентифицируйте файл - переменные умирают?
-
29-09-2020 - |
Вопрос
Я пытаюсь использовать Simpleetest с Codeigniteriter, используя код, предоставляемый Maroonbytes . Я использую лампу и NetBeans 6,9.
Сообщение: icnly_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 .
Отладчик указывает на это в
function add_test($file, &$test)
.
По какой-то причине NetBeans не подвергает значение $ файла в этот момент. Это значит, что это пусто?
Я уже щелкнул линию кода, потому что она заставляет меня за последнее кода 404 страницы не найдена. Казалось, отладчик получает в результате чего провалиться валидатор. Поэтому я добавил критерии, в моем невежестве (я уверен, что это должно быть обманчивым исключением или что-то):
if ($this->uri->uri_string == '' || $this->uri->uri_string == 'XDEBUG_SESSION_START')
{ ... }
.
Как я могу решить это? Кстати, это попытается решить Мой другой пост , который я буду обновлять; казалось лучшим, чтобы сделать этот дискретный вопрос.
if (file_exists($implementation))
{
require_once ($implementation); ...
.
Как только я на этой линии, 2 вещи случаются:
- Дисплей переменных в NetBeans пропускается За исключением суперглобалов
- Код ведет себя так, как будто
$ Реализация - это пустая переменная
Я добавил оператор чуть выше этих строк:
$implementation = 'http://var/www/sparts3/main/tests/views/basic_test_view.php';
.
Это ничего не меняет. Вывод браузера одинаково, используете ли я NetBeans / xdebug или нет.
Так что начинает выглядеть как глюк обработки PHP. Те, кто существует? Я могу попробовать загрузить и пытаться от Host Service - только для диагностических подсказок, и безрассудно, потому что CI без умения отладки беспокоить для меня.
<Сильное> Обновление 3:
Я попробовал все на компьютере WAPP. Та же результаты браузера (плюс некоторые «устаренные» ошибки, что-то связано с PHP 4 против 5). Я думаю, что могу отладить этот ПК (если XDebug работает), но кажется мало точка.Решение
Переименован ли вы Basic_test_v.php на basic_test_view.php? Код ожидает, что ваши файлы будут названы и сохранены вправо.
<Сильное> Обновление 1 (да, я скучно)
Я уже щелкнул линию кода потому что это заставляет меня за код 404 Страница не найдена. Казалось, отладчик Получить ввоз вариатор потерпеть неудачу. Так что я добавил критерии, в моем невежестве путь (я уверен, что это должно быть обработанным Исключение или что-то еще):
if ($this->uri->uri_string == '' || $this->uri->uri_string == 'XDEBUG_SESSION_START') { ... }
.
Как я могу решить это? Кстати, это попытается решить мою Другой пост, который я буду обновлять; казалось лучшим, чтобы сделать это дискрети Вопрос.
«правильное» решение этого вопроса:
Установите $config['uri_protocol'] = "AUTO";
для $config['uri_protocol'] = "PATH_INFO";
и генеракодицетагкод для генеракодицетагкода
в config.php (прочитайте комментарий выше этих настроек, они очень полезны)
После более глубокого взгляда на test.php Я могу сказать вам, что ваши тестовые файлы должны быть названы так:
% Имя% _% Тип% _test.php (где% Type% - это единственное число)
Чтобы сделать его более понятным здесь примером:
У нас есть контроллер Добро пожаловать в файл Welcomed.php
Тест на этот контроллер должен быть назван
Скрипт 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)
Другие советы
Если то, что вы пытаетесь загрузить, это представление, вы пытались использовать $this->load->view('basic_test_view');
?