0

我正在尝试将 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 的值。这是否意味着它是空的?

我已经 jimmied 一行代码,因为它让我通过了 Code 404 Page Not Found。似乎调试器 GET 导致验证器失败。所以我以我无知的方式添加了一个标准(我确定它应该是一个已处理的异常或其他东西):

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

我该如何解决这个问题?顺便说一句,这是试图解决我的另一篇文章,我将对其进行更新;似乎最好把这个问题变成一个离散的问题。


更新 1: 我一直在使用 Web Developer 插件 (Firefox) 来试验 POST 条目。我相信这些在代码中处理不当。在调试时,NetBeans 似乎仍然不愿显示一些字符串变量;这令人沮丧。

更新 2: 在我看来,有效的代码处理在 NetBeans 停止显示变量的同一点停止。我正在逐步完成test.php。我正在完成一个函数add_test($file, &$test)。此函数以 if 语句打开;完成得很好,我可以看到变量。然后是一个新的 if 语句:

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

一旦我在那条线上,就会发生两件事:

  1. NetBeans 中显示的变量变为空白,除了 SuperGlobals
  2. 代码表现得好像 $implementation是一个空变量

我在这些行上方添加了一条语句:

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

这不会改变任何事情。无论我是否使用 NetBeans/Xdebug,浏览器的输出都是一样的。

所以它开始看起来像一个 PHP 处理故障。那些存在吗?我可能会尝试从主机服务上传和尝试——仅用于诊断线索,而且很无聊,因为没有调试能力的 CI 对我来说是不感兴趣的。


更新 3: 我在 WAMP PC 上尝试了一切。相同的浏览器结果(加上一些“已弃用”的错误,与 PHP 4 与 5 有关)。我想我可以在那台 PC 上调试(如果 Xdebug 正在运行),但似乎没什么意义。

4

2 回答 2

1

您是否将 basic_test_v.php 重命名为 basic_test_view.php?该代码希望您的文件被正确命名和存储。

更新1(是的,我很无聊)

我已经 jimmied 一行代码,因为它让我通过了 Code 404 Page Not Found。似乎调试器 GET 导致验证器失败。所以我以我无知的方式添加了一个标准(我确定它应该是一个已处理的异常或其他东西):

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

我该如何解决这个问题?顺便说一句,这是为了解决我的另一篇文章,我会更新;似乎最好把这个问题变成一个离散的问题。

这个问题的“正确”解决方案是:在 config.php 中设置和到 ($config['uri_protocol'] = "AUTO";阅读 这些设置上面的评论,它们非常有帮助)$config['uri_protocol'] = "PATH_INFO";$config['enable_query_strings'] = FALSE;$config['enable_query_strings'] = TRUE;

在更深入地查看 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);
}

如果您遵循文件名约定,一切都应该运行良好(我已经在带有 zend 服务器 ce、xdebug、simpletest 和 netbeans 6.9 的 macbook 上对其进行了测试)

于 2010-08-03T09:44:46.437 回答
0

如果您要加载的是视图,您是否尝试过使用$this->load->view('basic_test_view');

于 2010-08-03T09:09:25.950 回答