Domanda

Sto cercando di utilizzare SimpleTest con CodeIgniter, utilizzando il codice fornito da maroonbytes.Sto usando LAMP e NetBeans 6.9.

La pagina test.php si carica nel mio browser.Ho uno stub test in atto e viene visualizzato nelle selezioni a discesa.Quando provo ad eseguirlo, ottengo 2 errori PHP:

Messaggio:include_once(/var/www/sparts3/main/tests/basic_test_v.php):Fallimento nell'apertura del flusso:Nessun file o directory con questo nome

Messaggio:include_once():Apertura non riuscita '/var/www/sparts3/main/tests/basic_test_v.php' per l'inclusione (include_path = '.:/Usr/share/php:/usr/share/pear')

La strada è sbagliata... basic_test_v.php è in una sottocartella /test/viste.

Il debugger lo indica in prova.php:

function add_test($file, &$test)

Per qualche motivo NetBeans non espone il valore di $file a questo punto.Questo significa che è vuoto?

Ho già modificato una riga di codice perché mi fa superare una pagina Codice 404 non trovata.sembrava che il debugger GET stesse causando il fallimento del validatore.Quindi ho aggiunto un criterio, nel mio modo ignorante (sono sicuro che dovrebbe essere un'eccezione gestita o qualcosa del genere):

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

Come posso risolvere questo?A proposito, si tenta di risolvere questo problema l'altro mio post, che aggiornerò;sembrava meglio rendere questa domanda discreta.


AGGIORNAMENTO 1: Ho utilizzato il componente aggiuntivo Web Developer (Firefox) per sperimentare le voci POST.Credo che questi siano stati gestiti in modo errato nel codice.Sembra ancora che NetBeans stia esitando a mostrare alcune variabili stringa durante il debug;questo è frustrante

AGGIORNAMENTO 2: Mi sembra che l'elaborazione del codice valido si interrompa nello stesso punto in cui NetBeans smette di visualizzare le variabili.Sto attraversando prova.php.Sono a metà di una funzione, aggiungi_test($file, &$test).Questa funzione si apre con un'istruzione if;finisce bene e posso vedere le variabili.Quindi una nuova istruzione if:

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

Appena sono su quella linea accadono 2 cose:

  1. Le variabili visualizzate in netbeans diventano vuote tranne i superglobal
  2. Il codice si comporta come se$implementazione è una variabile vuota

Ho aggiunto una dichiarazione appena sopra queste righe:

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

Questo non cambia nulla.L'output del browser è lo stesso sia che si utilizzi NetBeans/Xdebug o meno.

Quindi inizia a sembrare un problema tecnico nell'elaborazione di PHP.Esistono?Potrei provare a caricare e provare dal servizio host, solo per indizi diagnostici e senza tristezza, perché la CI senza la possibilità di eseguire il debug non mi interessa.


AGGIORNAMENTO 3: Ho provato tutto su un PC WAMP.Stessi risultati del browser (più alcuni errori "deprecati", qualcosa che ha a che fare con PHP 4 vs.5).Penso di poter eseguire il debug su quel PC (se Xdebug funziona), ma sembra poco utile.

È stato utile?

Soluzione

Hai rinominato basic_test_v.php in basic_test_view.php?il codice prevede che i tuoi file siano nominati e archiviati correttamente.

AGGIORNAMENTO 1 (sì, mi annoio)

Ho già preso in giro una riga di codice perché mi fa oltre una pagina di codice 404 non trovata.Sembrava che il debugger ottenga il fallimento del validatore.Quindi ho aggiunto un criterio, nel mio modo ignorante (sono sicuro che dovrebbe essere un'eccezione gestita o qualcosa del genere):

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

Come posso risolvere questo?A proposito, questo è tentato di risolvere il mio altro post, che aggiornerò;Sembrava meglio renderlo una domanda discreta.

La soluzione "giusta" a questo problema è:impostato $config['uri_protocol'] = "AUTO"; A $config['uri_protocol'] = "PATH_INFO";E $config['enable_query_strings'] = FALSE; A $config['enable_query_strings'] = TRUE;nel config.php (leggi il commento sopra quelle impostazioni, sono molto utili)

Dopo uno sguardo più approfondito a test.php posso dirti che i tuoi file di test dovrebbero essere nominati in questo modo:

%name%_%type%_test.php (dove %type% è singolare)

per renderlo più chiaro ecco un esempio:

Abbiamo un benvenuto controller inserito nel file welcome.php Il test per questo controller dovrebbe essere nominato benvenuto_controller_test.php e memorizzato in tests/controllers/

lo script test.php tenta di caricare automaticamente il file di test e il file testato.Ma secondo me è da correggere.

Ho modificato la funzione get_loader_id e add_test come segue

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);
}

Se stai seguendo le convenzioni di nome file dovrebbero funzionare bene (l'ho testato su un MacBook con Zend Server CE, XDEBUG, SIMPLETEST e NetBeans 6.9)

Altri suggerimenti

Se quello che stai tentando di caricare è una vista, hai provato a utilizzare $this->load->view('basic_test_view'); ?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top