使用 CodeIgniter 进行 SimpleTest — 无法识别文件 — 变量会消失吗?
-
29-09-2020 - |
题
我正在尝试将 SimpleTest 与 CodeIgniter 一起使用,使用由 栗色字节. 。我正在使用 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/usr/share/share/php:/php:/usr/share/pear')
路径错误—— basic_test_v.php 位于子文件夹中 /测试/视图.
调试器指出这一点 测试.php:
function add_test($file, &$test)
由于某种原因,NetBeans 此时不公开 $file 的值。这是否意味着它是空的?
我已经修改了一行代码,因为它让我跳过了 Code 404 Page Not Found(代码 404 未找到页面)。看来调试器 GET 导致验证器失败。所以我以我无知的方式添加了一个标准(我确信它应该是一个已处理的异常或其他东西):
if ($this->uri->uri_string == '' || $this->uri->uri_string == 'XDEBUG_SESSION_START')
{ ... }
我该如何解决这个问题?顺便说一句,这是试图解决 我的另一篇文章, ,我会更新;似乎最好把这个问题变成一个离散的问题。
更新1: 我一直在使用 Web Developer 插件 (Firefox) 来试验 POST 条目。我相信这些在代码中处理不当。NetBeans 似乎仍然不愿在调试时显示一些字符串变量;这令人沮丧。
更新2: 在我看来,有效的代码处理在 NetBeans 停止显示变量的同一点停止。我正在迈过 测试.php. 。我正在执行一个函数, add_test($文件, &$测试). 。该函数以 if 语句打开;效果很好,我可以看到变量。然后是一个新的 if 语句:
if (file_exists($implementation))
{
require_once ($implementation); ...
一旦我上线,就会发生两件事:
- Netbeans中显示的变量除外,除了超级全球
- 该代码的行为就像$实施 是一个空变量
我在这些行上方添加了一条声明:
$implementation = 'http://var/www/sparts3/main/tests/views/basic_test_view.php';
这不会改变任何事情。无论我是否使用 NetBeans/Xdebug,浏览器输出都是相同的。
所以它开始看起来像是 PHP 处理故障。那些存在吗?我可能会尝试从主机服务上传和尝试——仅用于诊断线索,而且毫无兴致,因为没有调试能力的 CI 对我不感兴趣。
更新3: 我在 WAMP PC 上尝试了一切。相同的浏览器结果(加上一些“已弃用”错误,与 PHP 4 与 PHP 4 相关)5)。我想我可以在那台 PC 上进行调试(如果 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['enable_query_strings'] = FALSE;
到 $config['enable_query_strings'] = TRUE;
在 config.php 中(阅读这些设置上面的注释,它们非常有帮助)
深入研究 test.php 后,我可以告诉您,您的测试文件应该这样命名:
%name%_%type%_test.php(其中%type%是单数)
为了更清楚地说明这一点,这里举一个例子:
我们在文件中迎来了一个控制器的欢迎。php该控制器的测试应命名 欢迎控制器_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);
}
如果您遵循文件名约定,则所有内容都应该很好地运行(我已经在带有Zend Server CE,Xdebug,Simpletest和Netbeans的MacBook上进行了测试)6.9)
其他提示
如果您尝试加载的是视图,您是否尝试过使用 $this->load->view('basic_test_view');
?