2009-12-11 8 views
3

Donc je travaille avec CakePHP v1.2.5. Sur mon projet actuel, j'ai décidé de commencer à écrire des tests en codant la fonctionnalité (yay TDD). J'ai des problèmes avec le chargement des appareils.cakephp test de modèles unitaires, problème d'appareils

Pour aider dans le processus, je vais décrire mon code (vraiment très simple en ce moment). Mon modèle est défini comme si

// app/models/newsitem.php 
<?php 
class NewsItem extends AppModel 
{ 
    var $name='NewsItem'; 
} 
?> 

// app/tests/fixtures/newsitem_fixture.php 
<?php 

class NewsItemFixture extends CakeTestFixture 
{ 
    var $name = 'NewsItem'; 
    var $import = 'NewsItem'; 

    var $records = array(
     array('id' => '1', 'title' => 'News Item 1', 'body' => 'This is the first piece of news', 'created' => '2007-03-18 10:39:23', 'modified' => '2007-03-18 10:41:31'), 
     array('id' => '2', 'title' => 'News 2', 'body' => 'This is some other piece of news', 'created' => '2009-05-04 9:00:00', 'modified' => '2009-05-05 12:34:56') 
    ); 
} 

?> 

// app/tests/models/newsitem.test.php 
<?php 
App::Import('Model', 'NewsItem'); 

class NewsItemTestCase extends CakeTestCase 
{ 
    var $fixtures = array('app.newsitem'); 

    function setUp() 
    { 
     $this->NewsItem =& ClassRegistry::init('NewsItem'); 
    } 

    function testFindAll() 
    { 
     $results = $this->NewsItem->findAll(); 
     $expected = array(
      array('NewsItem' => array('id' => '1', 'title' => 'News Item 1', 'body' => 'This is the first piece of news', 'created' => '2007-03-18 10:39:23', 'modified' => '2007-03-18 10:41:31')), 
      array('NewsItem' => array('id' => '2', 'title' => 'News 2', 'body' => 'This is some other piece of news', 'created' => '2009-05-04 9:00:00', 'modified' => '2009-05-05 12:34:56')) 
     ); 
     print_r($results); 
     $this->assertEqual($results, $expected); 
    } 
} 

?> 

Quoi qu'il en soit, mon problème est, quand je lance la suite de tests dans un navigateur (aller http://localhost/test.php), le coureur de cas de test tente de charger la disposition de mon application (ce qui est bizarre parce que je Je suis juste en train de tester le modèle) qui référence un autre modèle qui n'est évidemment pas chargé dans la base de données de test et j'obtiens une erreur. Si je supprime la ligne var $fixtures = array('app.newsitem') de mon fichier NewsItemTestCase, le scénario de test fonctionne correctement, MAIS il ne charge pas les appareils (pour des raisons évidentes).

Des idées, des suggestions? Pour être honnête, j'ai un peu de mal à trouver plus de 3 tutoriels sur ce sujet.

+0

Juste un heads-up. J'ai l'impression d'avoir résolu le problème en recréant le modèle et en testant les classes en utilisant l'utilitaire de la console de cuisson de cake. Le changement ne je vois est que la classe modèle est correctement (basé sur son opinion) est maintenant en application/modèles/news_item.php –

Répondre

2

c'était il y a longtemps mais le problème est les conventions de nommage, si l'appareil est appelé 'NewsItemFixture' le fichier devrait être news_item_fixture, pas newsitem_fixture. Si vous voulez le fichier appelé newsitem_fixture, la classe fixture devrait être NewsitemFixture.

Il en va de même pour tous les autres fichiers, comme le modèle que vous avez là.

+0

Désolé pour creuser ce, mais je rencontre actuellement le même problème. J'ai mis à jour mon nom pour rencontrer la convention, mais toujours pas de chance. Si vous avez le temps de regarder, je vous en serais reconnaissant: http://stackoverflow.com/questions/7408936/cakephp-unit-testing-fixture-name-conventions-argh – Zetaphor

+0

Un moyen facile de vous assurer que votre les fichiers sont correctement nommés (y compris les tests et les accessoires) est d'utiliser le [BakeShell] (http://book.cakephp.org/2.0/en/console-and-shells/code-generation-with-bake.html), bien que c'est vraiment 2.x et plus. – beporter

+0

gâteaux cuire au four a été bien avant 2.x – dogmatic69