0

maroonbytesが提供するコードを使用して、 CodeIgniter で SimpleTest を使用しようとしています。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 の値を公開しません。これは空っぽということですか?

Code 404 Page Not Found を通過したため、既にコード行をジミーしました。デバッガーの GET が原因でバリデーターが失敗したようです。だから私は無知な方法で基準を追加しました(私はそれが処理された例外か何かであるべきだと確信しています):

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

どうすればこれを解決できますか? ところで、これは私の他の投稿を解決しようとしています。これを更新します。これを個別の質問にするのが最善のようです。


更新 1: Web 開発者アドイン (Firefox) を使用して、POST エントリを試しています。これらはコードで誤って処理されていると思います。デバッグ中に NetBeans がいくつかの文字列変数を表示することをためらっているように見えます。これはイライラします。

更新 2: NetBeans が変数の表示を停止するのと同じ時点で、有効なコード処理が停止するように思えます。私はtest.phpをステップ実行しています。関数add_test($file, &$test)の途中です。この関数は if ステートメントで始まります。それはうまく終わり、変数を見ることができます。次に、新しい if ステートメント:

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

その行にいるとすぐに、2 つのことが起こります。

  1. SuperGlobals を除いて、NetBeans の変数表示が空白になる
  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 (はい、退屈です)

Code 404 Page Not Found を通過したため、既にコード行をジミーしました。デバッガーの GET が原因でバリデーターが失敗したようです。だから私は無知な方法で基準を追加しました(私はそれが処理された例外か何かであるべきだと確信しています):

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

どうすればこれを解決できますか? ところで、これは私の他の投稿を解決しようとしています。これを更新します。これを個別の質問にするのが最善のようです。

この問題の「正しい」解決策は、config.php で$config['uri_protocol'] = "AUTO";to$config['uri_protocol'] = "PATH_INFO";$config['enable_query_strings'] = FALSE;to を設定することです$config['enable_query_strings'] = TRUE; (これらの設定の上のコメントを読んでください。非常に役に立ちます)。

test.php を詳しく見てみると、テスト ファイルは次のように命名する必要があることがわかります。

%name%_%type%_test.php (%type% は単数)

ここで例をより明確にするために:

ファイルwelcome.phpに配置されたコントローラーwelcomeがあります。このコントローラーのテストは、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 server 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 に答える