我是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
。
这是正常行为吗?
答案 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());