2009-07-18 9 views
1

J'ai des difficultés à tester les contrôleurs dans Codeigniter: J'utilise Toast mais quand j'appelle ma classe de contrôleur domestique, j'obtiens une exception que "db" n'est pas définie. Quelqu'un a-t-il une idée de comment tester ce 1-1?Comment tester les contrôleurs avec CodeIgniter PART 2?

Merci

class Home_tests extends Toast { 


function __construct() { 
    parent::__construct(__FILE__); 
// Load any models, libraries etc. you need here 
} 


function test_select_user() { 
    $controller = new Home(); 
    $controller->getDbUser('[email protected]','password'); 
    assert($query->num_rows() == 0); 
} 
} 
+1

pourquoi est cette partie 2 ?? – Boldewyn

+0

Quelle version de CI avez-vous? – Boldewyn

+0

Juste cette question a été posée une fois, mais ne va pas dans la même direction: http://stackoverflow.com/questions/1139391/how-to-test-controllers-with-codeigniter. I utilisateur 1.7.1. Le problème est qu'il n'est pas possible d'appeler un contrôleur d'un autre hors de la boîte. –

Répondre

0

Vous devrez peut-être modifier vos paramètres de connectivité de base de données dans ../system/application/config/database.php

+0

Ce n'est pas le problème, mais il n'est pas toujours possible d'appeler un contrôleur depuis un autre, et avec Toast c'est le cas puisque la classe de la base de test hérite de Controller. –

+0

Mes paramètres de base de données sont corrects. Je peux maintenant tester mes classes de modèle via le chargement du modèle dans la classe de test, mais pas les classes de contrôleur. –

+1

Dans CodeIgniter, vous n'êtes pas censé déclarer/instancier/appeler un contrôleur d'un autre contrôleur. Je pense que c'est là que réside le problème. Je pense que ce dont vous avez besoin est une bibliothèque - quelque part où vous pouvez appeler un autre objet/bibliothèque et quelque chose que vous pouvez connecter au modèle, instancier dans un contrôleur. – Randell

8

Comme d'autres l'ont mentionné, CI ne vous laisse pas appeler un contrôleur d'un autre contrôleur. La raison est que les contrôleurs créent toujours des en-têtes de réponse (même lorsque vous ne chargez aucune vue ou n'appelez pas la classe de sortie) et que vous n'êtes pas autorisé à envoyer deux ensembles d'en-têtes HTTP au navigateur. En codant Toast, j'ai essayé de pirater le CI pour le permettre, mais il faut un peu de piratage du Loader, et je suis arrivé à la conclusion que vous ne devriez vraiment pas mettre de logique lourde dans vos contrôleurs de toute façon. IMO, pour une modularité MVC correcte, ce matériel appartient à vos modèles, bibliothèques et helpers (qui peuvent tous être testés unitairement avec Toast).

+0

+1 pour me parler de refactoriser mon contrôleur. –

Questions connexes