Question

J'essaie d'utiliser SimpleTest avec CodeIgniter, en utilisant le code fourni par marronoctets.J'utilise LAMP et NetBeans 6.9.

La page test.php se charge dans mon navigateur.J'ai un test de talon en place et il apparaît dans les sélections déroulantes.Lorsque j'essaie de l'exécuter, j'obtiens 2 erreurs PHP :

Message:include_once(/var/www/sparts3/main/tests/basic_test_v.php) :échec de l'ouverture du flux :Aucun fichier ou répertoire de ce nom

Message:include_once() :Échec de l'ouverture '/var/www/parts3/main/tests/basic_test_v.php' pour l'inclusion (include_path = '.: / Usr / share / php: / usr / share / pear')

Le chemin est faux -- basic_test_v.php est dans un sous-dossier /tests/vues.

Le débogueur le souligne dans test.php:

function add_test($file, &$test)

Pour une raison quelconque, NetBeans n'expose pas la valeur de $file à ce stade.Cela veut-il dire qu'il est vide ?

J'ai déjà jimmé une ligne de code car cela me permet de dépasser une page de code 404 introuvable.il semblait que le débogueur GET provoquait l'échec du validateur.J'ai donc ajouté un critère, à ma manière ignorante (je suis sûr que ce devrait être une exception gérée ou quelque chose du genre) :

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

Comment puis-je resoudre ceci?BTW, ceci est tenté de résoudre mon autre message, que je mettrai à jour ;il a semblé préférable d'en faire une question discrète.


MISE À JOUR 1 : J'utilise le complément Web Developer (Firefox) pour expérimenter les entrées POST.Je pense que ceux-ci sont mal gérés dans le code.Il semble toujours que NetBeans hésite à afficher certaines variables de chaîne lors du débogage ;C'est frustrant.

MISE À JOUR 2 : Il me semble que le traitement du code valide s'arrête au même moment où NetBeans cesse d'afficher les variables.je passe à travers test.php.Je suis à mi-chemin d'une fonction, add_test($fichier, &$test).Cette fonction s'ouvre avec une instruction if ;ça se termine bien, et je peux voir les variables.Puis une nouvelle instruction if :

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

Dès que je suis sur cette ligne, 2 choses se produisent :

  1. L'affichage des variables dans Netbeans devient vide à l'exception des superglobaux
  2. Le code se comporte comme si$implémentation est une variable vide

J'ai ajouté une déclaration juste au-dessus de ces lignes :

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

Cela ne change rien.La sortie du navigateur est la même, que j'utilise NetBeans/Xdebug ou non.

Cela commence donc à ressembler à un problème de traitement PHP.Est-ce que ça existe ?Je peux essayer de télécharger et d'essayer à partir du service hôte - uniquement pour des indices de diagnostic, et sans joie, car CI sans la capacité de déboguer ne m'intéresse pas.


MISE À JOUR 3 : J'ai tout essayé sur un PC WAMP.Mêmes résultats de navigateur (plus quelques erreurs "obsolètes", quelque chose à voir avec PHP 4 vs.5).Je pense que je peux déboguer sur ce PC (si Xdebug fonctionne), mais cela ne semble pas utile.

Était-ce utile?

La solution

Avez-vous renommé basic_test_v.php en basic_test_view.php ?le code s'attend à ce que vos fichiers soient nommés et stockés correctement.

MISE À JOUR 1 (oui je m'ennuie)

J’ai déjà jimmied une ligne de code parce qu’il me permet de passer un code 404 Page introuvable.Il semblait que le débogueur GET provoquait l’échec du validateur.J’ai donc ajouté un critère, dans mon ignorance (je suis sûr qu’il devrait s’agir d’une exception ou quelque chose comme ça) :

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

Comment puis-je resoudre ceci?Au fait, c’est une tentative de résoudre mon problème autre post, que je mettrai à jour ;Il m’a semblé préférable d’en faire un question.

La « bonne » solution à ce problème est :ensemble $config['uri_protocol'] = "AUTO"; à $config['uri_protocol'] = "PATH_INFO";et $config['enable_query_strings'] = FALSE; à $config['enable_query_strings'] = TRUE;dans le config.php (lisez le commentaire au-dessus de ces paramètres, ils sont très utiles)

Après un examen plus approfondi de test.php, je peux vous dire que vos fichiers de test doivent être nommés comme ceci :

%name%_%type%_test.php (où %type% est au singulier)

pour que ce soit plus clair, voici un exemple :

Nous avons un contrôleur welcome placé dans le fichier welcome.php Le test de ce contrôleur doit être nommé bienvenue_contrôleur_test.php et stocké sous tests/controllers/

le script test.php tente de charger automatiquement le fichier de test et le fichier testé.Mais à mon avis, il faut corriger.

J'ai modifié les fonctions get_loader_id et add_test comme suit

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

Si vous suivez les conventions de nom de fichier, tout devrait fonctionner correctement (Je l’ai testé sur un macbook avec Zend Server CE, xdebug, SimpleTest et NetBeans 6.9)

Autres conseils

Si ce que vous essayez de charger est une vue, avez-vous essayé d'utiliser $this->load->view('basic_test_view');?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top