IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Test d'un controler avec "flush"


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 5
    Par défaut Test d'un controler avec "flush"
    Bonjour,

    Après avoir fouillé la toile de long en large, je me tourne vers vous pour un problème vraiment étrange..

    J'essais de tester (en vérifiant le statusCode dans un premier temps) si un "Persist" est bien passé.

    Voici le code de la fonction du controller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php 
         public function ajouterCompteAction()
        {
        	//$post = $this->getRequest();
        	$compte = new Compte();
        	$compte->setMail('xxxxxx');
        	$compte->setPassword('xxxxx');
     
     
        	$em = $this->getDoctrine()->getManager();
        	$em->persist($compte);
        	$em->flush();
     
       		return new Response("true");
        } 
    ?>
    Lorsque je vais à la page (routée /inscription/ajouter) via le navigateur, ça fonctionne bien.

    Maintenant, quand je veux passer ce test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
     
    namespace Peekmo\NosweenBundle\Tests\Controller;
     
    use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
     
    class InscriptionControllerTest extends WebTestCase
    {
        public function testAjouterCompte()
        {
    		$client = static::createClient();
        	$crawler = $client->request('POST', '/inscription/ajouter');
        	$this->assertTrue($client->getResponse()->isSuccessful());
        }
    }
     
     
    ?>
    Et bien j'ai une erreur (code 500) comme quoi le driver n'est pas trouvé (mais lequel...) Voici un extrait du content, j'ai pas réussi à tout récupérer:
    <!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>\n <meta name="robots" content="noindex,nofollow" />\n <title> could not find driver (500 Internal Server Error)\n</title>\n <link href="/bundles/framework/css/structure.css" rel="stylesheet" type="text/css" media="all" />\n <link href="/bundles/framework/css/body.css" rel="stylesheet" type="text/css" media="all" />\n <link href="/bundles/framework/css/ex"...
    Quand j'enlève le ->flush() ça marche. Je ne sais ni pourquoi, ni comment le résoudre...

    Auriez-vous une idée pourquoi le test n'arrive pas à exécuter le flush() ?

    Merci !!

    P.S : J'ai la même erreur lorsque je test une fonction récupérant une entité, et elle marche par le navigateur aussi..

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Bonjour,

    As tu accés à ta base de données lorsque tu es en ligne de commande ?

    le mode CLI n'utilisant pas le même php.ini que apache, peux-être manque t'il des extensions dans le php.ini du CLI.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 5
    Par défaut
    Merci de votre réponse.

    Oui j'arrive à me connecter à ma base via la console =c

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    As tu consulté les logs dans app/logs/test.log ?
    Peux tu te connecter à app_test.php ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 5
    Par défaut
    Dans les logs, je trouve cette erreur là :

    request.CRITICAL: Uncaught PHP Exception PDOException: "could not find driver" at /opt/lampp/htdocs/Nosween-Symfony/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php line 36 {"exception":"[object] (PDOException: could not find driver at /opt/lampp/htdocs/Nosween-Symfony/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:36)"} []
    Pour la connexion à app_test.php, je suppose.. j'ai juste renommé mon app_dev en app_test mais je sais pas si ça suffit pour tester cela..

    Merci

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Dans ton app_test.php, qui est théoriquement appelé par le crawler, tu dois avoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $kernel = new AppKernel('test', true);
    ce qui fait que c'est le fichier app/config/config_test.yml qui sera chargé
    (celui-ci pouvant également faire appel à d'autres fichiers de config via la directive imports)

    Il faut que tu remontes le fil de ta config afin de voir ce qui est utilisé en environnement de test.

    n'hésites pas à vider le cache régulièrement

    Tu peux également essayer de lancer des lignes de commande en environnement de test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    app/console doctrine:shema:update --env=prod

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo