7

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?

Francesco
  • 405
  • 3
  • 15

2 Answers2

3

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',
] );
DevDonkey
  • 4,835
  • 2
  • 27
  • 41
1

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

gotardo
  • 71
  • 1
  • 5