Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Symfony functional test fail but the same request works in browser

I followed the Symfony documentation about functional tests in order to write my first one, but I have some issues. The response I get via browser works good:

Browser response

But when I run phpunit -c app/ in the shell I get a failure.

1) AppBundle\Tests\Controller\MeterAPIControllerTest::testGetAllVariables Failed asserting that 500 matches expected 200.

This is the code:

<?php

namespace AppBundle\Tests\Controller;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class MeterAPIControllerTest extends WebTestCase
{
    public function testGetAllVariables()
    {
        $client = static::createClient();
        $crawler = $client->request(
            'GET',
            '/meters/121/120/variables'
        );

        // Assert a specific 200 status code
        $this->assertEquals(200, $client->getResponse()->getStatusCode()); 
    }
}

If I try another test assertion, I get failure too.

// Assert that the "Content-Type" header is "application/json"
$this->assertTrue(
    $client->getResponse()->headers->contains(
        'Content-Type',
        'application/json'
    )
);

EDIT

When I run phpunit in app/logs/test.log I get a PHP Exception:

[2016-03-31 15:25:21] request.CRITICAL: Uncaught PHP Exception Doctrine\Common\Persistence\Mapping\MappingException: "Invalid mapping file 'AppBundle.Entity.EM2Meter.orm.yml' for class 'AppBundle\Entity\EM2Meter'." at /Applications/MAMP/htdocs/iso50k1_tst_symfony/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/MappingException.php line 86 {"exception":"[object] (Doctrine\Common\Persistence\Mapping\MappingException(code: 0): Invalid mapping file 'AppBundle.Entity.EM2Meter.orm.yml' for class 'AppBundle\Entity\EM2Meter'. at /Applications/MAMP/htdocs/iso50k1_tst_symfony/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/MappingException.php:86)"} []

How can I fix this?

like image 812
Francesco Avatar asked Mar 31 '16 07:03

Francesco


2 Answers

You have not told the symfony client to contact the localhost server on port 8000, its still defaulting to 80.

When you instantiate your client, specify the host like this.

$client = static::createClient([], [
    'HTTP_HOST' => 'localhost:8000',
] );
like image 72
DevDonkey Avatar answered Oct 24 '22 11:10

DevDonkey


It looks like there is a cache problem here. I think it is a good practice to clean cache for the current environment before running the tests and before running your project for functional tests:

$ php bin/console cache:clear --env=dev

$ php bin/console cache:clear --env=tests

like image 39
gotardo Avatar answered Oct 24 '22 11:10

gotardo