[Data fixtures] Test unitaires
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:
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:
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:
1 2 3 4
|
#config_test.yml
parameters:
database.server.dsn: mysql:host=localhost;dbname=monappli_tests;port=3306 |
Code:
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:
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...