2010-07-25 54 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');