Salut à tous,

j'ai un test unitaire qui utilise data fixture de doctrine pour tester qu'un utilisateur est persisté si il n'existe pas dans ma table et qu'il ne le persiste pas si il n'est pas dans ma table pour ma connexion à ma base de donné j'utilise un entity_manager qui utilise mon parameter.ini et mon test fonctionne très bien mais sur ma BDD principal alors que j'aimerai qu'il me fasse des test sur une table monapli_tests car à chaque fois je purge ma BDD.

Je suis sur la PR9 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
#Mon controller
                $user = new User();
                $user->setMail($mail);
 
                /**Verification de l'existance de l'user dans MySQL*/
                $em = $this->get('doctrine.orm.default_entity_manager');
                $iamHere = $em->getRepository('MonAppliUser:User')->iamHere($user->getMail());
 
                /**Si il n'existe pas dans MySQL on le créé*/
                if(!$iamHere){
                    $em->persist($user);
                    $em->flush();
                }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
#Fonction iamHere
public function iamHere($mail)
    {
        $query = $this->_em->createQuery('
            SELECT u.mail
            FROM MonAppliUser:User u
            WHERE u.mail = ?1
        ');
        $query->setParameter(1, $mail);
 
        return $query->getResult();
    }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
#config_test.yml
parameters:
    database.server.dsn: mysql:host=localhost;dbname=monappli_tests;port=3306
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
19
20
21
22
 
#testController
public function testUserNotExist()
    {
        $this->client = $this->createClient();
        #Recupère l'entity manager
        $em = $this->client->getContainer()->get('doctrine.orm.default_entity_manager');
        #Purge la base de donnée
        $executor = new ORMExecutor($em, new ORMPurger($em));
        $executor->execute(array(new UserFixturesNotExist()));
 
        $crawler = $this->client->request('GET', '/login');
 
        $form = $crawler->selectButton('Connection')->form();
        $form['login[mail]']->setValue('mon@adress.fr');
        $form['login[password]']->setValue('monPassword');
        $this->client->submit($form);
 
        $iamHere = $em->getRepository('MonAppliUser:User')->iamHere('mon@adress.fr');
 
        $this->assertEquals('mon@adress.fr', $iamHere[0]['mail']);
    }
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
19
20
21
22
23
24
25
26
27
28
29
30
 
#service.xml
<?xml version="1.0" ?>
 
<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
 
    <parameters>
        <parameter key="database.server.dsn">mysql:host=localhost;dbname=monappli;port=3306</parameter>
        <parameter key="database.server.username">user</parameter>
        <parameter key="database.server.password">passwd</parameter>
    </parameters>
 
    <services>
        <service id="database.connection" class="PDO">
            <argument>%database.server.dsn%</argument>
            <argument>%database.server.username%</argument>
            <argument>%database.server.password%</argument>
            <call method="setAttribute">
                <argument type="constant">PDO::ATTR_ERRMODE</argument>
                <argument type="constant">PDO::ERRMODE_EXCEPTION</argument>
            </call>
            <call method="setAttribute">
                <argument type="constant">PDO::MYSQL_ATTR_INIT_COMMAND</argument>
                <argument type="string">SET NAMES UTF8</argument>
            </call>
        </service>
    </services>
</container>
mon soucis c'est que pour purger la BDD il me faut un entity_manager donc si je met en paramètre 'database.connection' j'ai une erreur...