phpunit测试通过,浏览器中的页面加载在Symfony 2

时间:2016-04-30 15:36:07

标签: symfony phpunit twig

我是phpunit测试的新手,并做了一个非常简单的测试,寻找状态代码。

我跑步时测试通过:

bin\phpunit -c app src\AppBundle\Tests\Controller\StarLinX\TravelControllerTest.php
PHPUnit 4.6.10 by Sebastian Bergmann and contributors.
Configuration read from C:\PhpstormProjects\dir\app\phpunit.xml.dist 

.

Time: 6.03 seconds, Memory: 20.00Mb

OK (1 test, 1 assertion)

但是当我在浏览器中加载页面时,会抛出异常,呈现状态代码为500的twig文件。

我想也许这是一个缓存问题,所以我在--env = dev,prod和test中清除了缓存。

如何解决此错误?

这是我的测试文件:

namespace AppBundle\Tests\Controller\StarLinX;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class TravelControllerTest extends WebTestCase {
  public function testGET() {
  // Create a new client to browse the application
  $client = static::createClient();

  // get the page
  $crawler = $client->request('GET', '/travel/aaaaa');
  $this->assertEquals(200, $client->getResponse()->getStatusCode(), "Unexpected HTTP status code for GET /travel/aaaaa");

  }
}

这是在开发环境中运行时引发的错误:

An exception has been thrown during the rendering of a template ("Notice: Array to string conversion")

经过一番分析后,我发现{{ weatherInfo }}周围的错误应为{{ weatherInfo.now }}。这在运行开发环境时会引发错误。在生产中,twig只显示Array

这是正常行为吗?

1 个答案:

答案 0 :(得分:0)

由于编写的测试只检查错误状态,测试不够具体。如果显示另一页怎么办?测试仍然会通过。

您应该添加一些其他测试,以确保正确显示页面:

// …
$this->assertEquals(200, $client->getResponse()->getStatusCode(),
    "Unexpected HTTP status code for GET /travel/aaaaa");

// Check that the page has a title.
$this->assertSame(
    1,
    $crawler->filter('title')->count()
);
// Check that the page has a correct title.
$this->assertSame(
    'Travel',
    $crawler->filter('title')->text()
);

// Check something in the content
$this->assertSame(
    'Hello, World!',
    $crawler->filter('body > div#content')->text()
);

如果您没有足够的信息来调试代码,那么tou可以访问通常包含错误消息的页面内容:

die($this->client->getResponse()->getContent());