2014-06-16 1 views
1

Je tente d'exécuter mon premier test fonctionnel dans Symfony2 à l'aide de DemoController.Objet de la classe Symfony Component DomCrawler Crawler n'a pas pu être converti en chaîne

Si je charge la page à partir du navigateur, les données affichées sont correctes. Mais si je tente de lancer le test en utilisant la commande phpunit -c app je reçu le message d'erreur suivant:

There was 1 error: 

1) Blog\CoreBundle\Tests\Controller\AuthorControllerTest::testShow 
Object of class Symfony\Component\DomCrawler\Crawler could not be converted to string 

Voici ma classe AuthorControllerTest:

<?php 

namespace Blog\CoreBundle\Tests\Controller; 

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; 

/** 
* Class AuthorControllerTest 
*/ 
class AuthorControllerTest extends WebTestCase 
{ 
    /** 
    * Test show author 
    */ 
    public function testShow() 
    { 
     $client = static::createClient(); 

     /** @var Author $author */ 
     $author = $client->getContainer() 
      ->get('doctrine') 
      ->getManager() 
      ->getRepository('ModelBundle:Author') 
      ->findFirst(); 
     $authorPostCount = $author->getPosts()->count(); 

     $crawler = $client->request('GET', '/author/'.$author->getSlug()); 

     $this->assertTrue($client->getResponse()->isSuccessful(), 'The response was not successful'); 

     $this->assertTrue($authorPostCount, $crawler->filter('h2'), 'There should be '.$authorPostCount.' posts'); 
    } 

} 

Répondre

2

Vous obtenez l'erreur de message lorsque vous exécutez la ligne suivante:

$this->assertTrue($authorPostCount, $crawler->filter('h2'), 'There should be '.$authorPostCount.' posts'); 

L'erreur est due aux mauvais paramètres que vous passez à la fonction assertTrue. Ceci est utilisé juste pour affirmer qu'une condition est vraie.

Pour affirmer le nombre d'éléments, vous devez utiliser la fonction assertCount.

$this->assertcount($authorPostCount, $crawler->filter('h2'), 'There should be '.$authorPostCount.' posts'); 
1

$crawler->filter('h2') retour d'un objet. Pour en comparer le contenu, utilisez la méthode text() pour extraire des informations. Essayez

$this->assertEquals($authorPostCount, $crawler->filter('h2')->text(), 'There should be '.$authorPostCount.' posts'); 

EDIT:

Et si vous voulez juste de comparer nombre de messages (pas la valeur du noeud <h2> mais nombre de <h2> noeuds à la page) utilisent count()

$this->assertEquals($authorPostCount, $crawler->filter('h2')->count(), 'There should be '.$authorPostCount.' posts'); 

ou juste

$this->assertCount($authorPostCount, $crawler->filter('h2'), 'There should be '.$authorPostCount.' posts'); 
+0

J'ai mis à jour ma réponse. – pazulx

Questions connexes