Pour faire marcher ce test simple, j'ai principalement du lutter pour
trouver les deux astuces suivantes:
1.  définir dans UserTest l'attribut useTable (sinon il cherche la
table users et pas user_tests)
2. ne pas utiliser setUp et TearDown mais preferer startCase()
endCase()

Bref merci bake pour ton travail a moitie fonctionnel!!

Ce qui donne :

// File fixture
class UserTestFixture extends CakeTestFixture {
    var $name = 'UserTest';
    var $import = 'array('table' => 'users', 'records' => true);
}

// File test
class UserTest extends User {
    var $name = 'UserTest';
    var $useDbConfig = 'test_suite';

    var $useTable = 'user_tests';
}

class UserTestCase extends CakeTestCase {
        var $TestObject = null;

        var $fixtures = array( 'user_test' );

        function startCase() {
                $this->TestObject = new UserTest();
        }

        function endCase() {
                unset($this->TestObject);
        }

        function testMe() {
                $result = $this->TestObject->findAll();
                debug($result);
                $expected = 1;
                $this->assertEqual($result, $expected);

                $this->assertTrue($this->TestObject->save(
                        array(
                                'UserTest' => array(
                                        'login'=>       'XXXXXXXXXXXXXXX',
                                        'password' =>   'CCCCCCCCCCCCCCC',
                                        'created'=>     '2008-01-27 03:56:13',
                                        'modified'=>    '2008-01-27 03:56:13'
                                )
                        )
                ));
        }
}

On Feb 14, 4:11 pm, esion <[EMAIL PROTECTED]> wrote:
> Je me suis remis aux tests unitaires aujourd'hui je te mets le code
> d'un test de méthode élémentaire (Model::findAll() ) je l'espère de la
> manière la plus claire possible.
>
> ################################
> ##On considere la configuration suivante :
>
> CREATE TABLE `users` (
>   `id` int(10) NOT NULL auto_increment,
>   `username` varchar(40) NOT NULL,
>   `password` varchar(40) NOT NULL,
>   `email` varchar(255) NOT NULL,
> )
>
> Le model user
> //FILE : app/models/user.php
> class User extends AppModel {
>         var $name = 'User';
>
> }
>
> ######################
> ## Création des données de tests : fixtures
>
> //FILE : app/tests/fixtures/user_fixtures.php
> class UserFixture extends CakeTestFixture {
>         var $name = 'User';
>         var $import = 'User'; //import du schema de la table
>
>         var $records = array(
>                 array('id' => 1, 'username' => 'admin', 'password' =>
> '4308fb05a903a6c0add7534f3f73bee25ec16f3d' /*sha1+salt = admin*/,
> 'email' => '[EMAIL PROTECTED]'),
>                 array('id' => 2, 'username' => 'esion', 'password' => 'esion',
> 'email' => '[EMAIL PROTECTED]'),
>                 array('id' => 4, 'username' => 'user', 'password' => 'user', 
> 'email'
> => '[EMAIL PROTECTED]'),
>                 );
>
> }
>
> ######################
> ## Test du Model
>
> //FILE : app/tests/cases/models/user.test.php
> App::import('Model', 'User'); //Import du model
>
> class UserTest extends User { //surcharge du model
>
>         var $name = 'User'; //Définition des objets avec le nom d'origine
>         var $useDbConfig = 'test'; //Spécification de la base de données à
> utiliser
>
> }
>
> class UserTestCase extends CakeTestCase {
>         var $fixtures = array('user'); //Appel des enregistrements : la table
> de test possède maintenant des enregistrements.
>
>         function testFindAll() { //test d'une méthode par défaut du model
>                 $this->TestObject =& new UserTest(); //Chargement du model
>                 $this->TestObject->recursive = 0;
>                 $result = $this->TestObject->findAll(array(), array('id',
> 'username')); //lancement de la méthode
>                 //debug($result);
>                 $expected = array(
>                                                 array('User' => array('id' => 
> 1, 'username' => 'admin')),
>                                                 array('User' => array('id' => 
> 2, 'username' => 'esion')),
>                                                 array('User' => array('id' => 
> 4, 'username' => 'user'))
>                                                 );
>                 $this->assertEqual($result, $expected); //vérification des 
> résultats
>         }
>
> }
>
> #####################
> ## Déroulement du test :
>
> Lorsque user.test.php est lancé
> 1- la classe UserTestCase est chargée
> 2- fixtures est spécifié : la table `test_suite_users` est créée dans
> la base de test (automagiquement, enfin je pense)
> 3- la méthode testFindAll() est lancée
> 4- L'objet testObject est créé
> 5- la méthode findAll de testObject est lancé et retourne les
> enregistrements (fixtures)
> 6- assert test le résultat
> 7- l'objet est détruit ainsi que la table avec les enregistrements
> (automagiquements).
>
> ##################
> ## Note :
> - Apparement les méthodes setUp et TearDown générés par bake pose des
> problèmes pour l'appel de la classe UserTest
> - Je me trompe peut être (surement) sur le déroulement du test.
>
> ## hf
>
> On 14 fév, 14:35, avairet <[EMAIL PROTECTED]> wrote:
>
> > Merci à tous les deux pour vos réponses, mais cela ne correspond pas à
> > mes questions...
> > C'est sans doute que je me suis mal exprimé.
>
> > @euphrate : le tuto dans la Bakery date un peu et n'aborde pas les
> > tests unitaires générés par le script Bake
>
> > @esion : oui j'avais lu ta discussion, très intéressante, mais
> > malheuresuement restée sans véritable émulation et rebonds
>
> > En fait le testing et la génération de code sont les grands absents de
> > la doc pour le moment, mais vu que les tests était l'un des thèmes
> > importants de la Cake fest et qu'ils semblent l'un des chantiers les
> > plus actifs au sein de la core team, je pense que nous aurons
> > prochainement des infos plus précises...
>
> > Je reviens à mes questions quand même :
>
> > - si je souhaite faire générer des tests unitaires, il semble
> > obligatoire d'avoir une base de test et de lui insérer les mêmes
> > tables que dans la base "default", sinon deux problèmes surviennent :
> > 1) au lancement du test unitaire, il y a un gros warning qui me dit
> > que la table "xyz_test" n'existe pas 2) au moment où l'on lance le
> > script Bake et que l'on dit vouloir travailler avec la base de test,
> > il est impossible de générer quoi que ce soit si la base est vide !
>
> > >>>> il est donc obligatoire d'avoir une base test et de la peupler avec 
> > >>>> des tables pour profiter à la fois des tests unitaires et de leur 
> > >>>> génération par le script Bake ?!
>
> > - si je choisis ma base "test" dans le script Bake, que je génère tout
> > le code de base d'une application (modèles et contrôleurs), Cake
> > écrit : $useDbConfig = 'test' dans l'entête des classes, donc ma
> > question : doit-on repasser partout pour remplacer "test" par
> > "default" lorsque la phase de test est terminée ? ou bien doit-on
> > refaire toute la génération de code en indiquant cette fois au script
> > Bake que l'on utilise la base "default" ?
>
> > J'espère que cela sera plus clair...
>
> > @ +
>
> > Avairet
>
> > On 13 fév, 23:18, esion <[EMAIL PROTECTED]> wrote:
>
> > > J'avais lancé ce sujet 
> > > :http://groups.google.fr/group/cakephp-fr/browse_thread/thread/ea2641e...
>
> > > J'ai quelque chose de plus ou moins fonctionnel et je dois dire que
> > > c'est loin d'être évident. Et le tuto du bakery ne parle que du test
> > > de models et pas des controllers.
>
> > > 1) Apparement peu importe la base de données que tu choisis, lorsqu'un
> > > test est lancé avec des fixtures celui-ci recreer les tables avec le
> > > prefixe "test_suite_ ".
> > > Les données de la base (default ou test) vont servir aux tests
> > > seulement si les fixtures ne sont pas spécifiés.
>
> > > On 13 fév, 19:16, euphrate_ylb <[EMAIL PROTECTED]> wrote:
>
> > > > Dans la bakery je trouve que cet article relativement complet:
>
> > > >http://bakery.cakephp.org/articles/view/testing-models-with-cakephp-1...
>
> > > > Pour le moment nous n'utilisons pas vraiment les test unitaires mais d
> > > > apres ce que je sais :
>
> > > > 1. Tu peux dire grace a l'attribut import de a tes fixtures si tu
> > > > souhaites utiliser la structure de la base devfault voire meme les
> > > > data.
> > > >  ex: var $import = array('model' => 'Article', 'records' => true);
>
> > > > 2. ...
>
> > > > 3. Pb de prefix dans la connexion?
>
> > > > 4. Lorsque tu lances les test unitaire, la connexion 'test' est
> > > > utilisée par defaut (si elle existe) sans rien changer dans tes
> > > > modeles
>
> > > > En esperant que quelqu un te reponde plus précisement.
>
> > > > euphrate_ylb
>
> > > > On Feb 13, 3:30 pm, avairet <[EMAIL PROTECTED]> wrote:
>
> > > > > Bonjour à tous,
>
> > > > > Quand on utilise le script Bake en ligne de commande, pour générer le
> > > > > code de base de notre application, on a la possibilité de créer
> > > > > également les tests unitaires. Mais j'ai l'impression que tout ne
> > > > > marche pas comme prévu...
>
> > > > > 1) Avant toute chose, doit on importer notre schéma SQL dans les deux
> > > > > bases : default et test ?
>
> > > > > 2) On doit choisir une Database config : default ou test, mais le
> > > > > comportement et la génération des fichiers ne semble pas identique
> > > > > selon qu'on choisit l'un ou l'autre...
>
> > > > > 3) Après la création de mon modèle, du fichier de test et de la
> > > > > fixture correspondante, si je lance mon test, j'ai de gros Warnings
> > > > > qui me disent, entre autres, que la table test_mymodel n'existe pas
>
> > > > > 4) Si je veux générer mon code et mes tests unitaires, je choisis donc
> > > > > "test" comme Database config, mais alors, dois-je ensuite refaire tout
> > > > > le processus de génération en choisissant "default" ? Parce que le
> > > > > fait de lui indiquer "test" entraîne l'insertion de "$useDbConfig =
> > > > > 'test';" dans tous mes modèles !
>
> > > > > Merci par avance de vos commentaires et suggestions, le script Bake et
> > > > > les Tests unitaires étant pour l'instant assez mal documentés sur les
> > > > > sites officiels ou les blogs des Bakers. J'espère que cela va changer
> > > > > après la CakeFest et le tout neuf CookBook...
>
> > > > > Avairet
--~--~---------~--~----~------------~-------~--~----~

Groupe "Cakephp-fr".
Adresse : [email protected]
Pour résilier  : [EMAIL PROTECTED]
Pour les options : http://groups.google.com/group/cakephp-fr?hl=fr
-~----------~----~----~----~------~----~------~--~---

Répondre à