2010-07-25 30 views
0

我想用CodeIgniter使用SimpleTest,使用maroonbytes提供的代码。我正在使用LAMP和NetBeans 6.9。SimpleTest与CodeIgniter - 不会识别文件 - 变量死亡?

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 /共享/ PHP:/ usr/share/pear')

路径有误 - basic_test_v.php位于子文件夹中/tests/views

调试器指向这test.php的

function add_test($file, &$test) 

出于某种原因的NetBeans不会在这一点上暴露$文件的价值。这是否意味着它是空的?

我已经使用了一行代码,因为它让我通过了代码404页面未找到。似乎调试器GET导致验证器失败。所以我增加了一个标准,我的无知方式(我敢肯定,这应该是一个处理的异常或东西):

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

我怎样才能解决这个问题?顺便说一句,这是试图解决my other post,我会更新;似乎最好将此作为一个离散的问题。


更新1:我一直在使用Web开发插件(火狐)与POST项实验。我相信这些代码被错误地处理了。它仍然显示NetBeans在调试时显示一些字符串变量时显得很笨拙;这令人沮丧。

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

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

只要我在这条线,2件事情:

  1. 变量在NetBeans中显示一片空白 除了超全局
  2. 代码的行为仿佛 $实施是一个空的变量

我添加了一个状态正好在这些线上方:

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

这不会改变任何东西。浏览器输出是相同的,无论我是否使用NetBeans/Xdebug。

所以它开始看起来像一个PHP处理故障。那些存在吗?我可以尝试上传并尝试从主机服务中获取 - 仅用于诊断线索,并且不用担心,因为没有调试能力的CI对我没有兴趣。


更新3:我什么都试过了WAMP的PC上。相同的浏览器结果(加上一些“不推荐”的错误,与PHP 4和5有关)。我想我可以在PC上进行调试(如果Xdebug正在运行),但似乎没什么意义。

回答

1

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

更新1(是即时通讯无聊)

我已经撬开了一行代码 ,因为它让我过去码404 找不到网页。它似乎是调试器 GET导致验证器失败。 所以我增加了一个标准,我的无知 方式(我敢肯定,这应该是一个处理 异常或东西):

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

我该如何解决这个问题?顺便说一句,这是试图解决我的 其他职位,我将更新; 似乎是最好的,这是一个离散的 问题。

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

后深入看看test.php我可以告诉你,你的测试文件应该这样命名:

%name%_%type%_test。PHP(其中%类型%为单数)

,使之更加明确这里的例子:

我们已经有了一个控制器欢迎放置在文件中的welcome.php 该控制器的测试应该被命名为welcome_controller _test.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); 
} 
如果你是以下文件名公约都应该运行得很好 (我测试过它与Zend Server CE中的的MacBook

,Xdebug的,最简单的和netbeans 6.9)

+0

感谢您的工作和几点建议。愿你的无聊能够回报你周围的人。 – Smandoli 2010-08-03 17:21:53

+0

不客气 – teemitzitrone 2010-08-04 08:38:46

0

如果你想加载的是一个视图,你有没有试过使用$this->load->view('basic_test_view');