我按照Symfony documentation关于功能测试来编写我的第一个,但是我有一些问题。我通过浏览器获得的响应效果很好:
但是当我在shell中运行phpunit -c app/
时,我会失败。
1) 的appbundle \测试\控制器\ MeterAPIControllerTest :: testGetAllVariables 无法断言500场比赛预计为200。
这是代码:
<?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());
}
}
如果我尝试另一个测试断言,我也会失败。
// Assert that the "Content-Type" header is "application/json"
$this->assertTrue(
$client->getResponse()->headers->contains(
'Content-Type',
'application/json'
)
);
修改
当我在phpunit
中运行app/logs/test.log
时,我收到了PHP异常:
[2016-03-31 15:25:21] request.CRITICAL:未捕获PHP异常 Doctrine \ Common \ Persistence \ Mapping \ MappingException:“无效的映射 为课程提供'AppBundle.Entity.EM2Meter.orm.yml' 'AppBundle \ Entity \ EM2Meter'。“at /Applications/MAMP/htdocs/iso50k1_tst_symfony/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/MappingException.php 第86行{“例外”:“[对象] (Doctrine \ Common \ Persistence \ Mapping \ MappingException(代码:0): 类的映射文件'AppBundle.Entity.EM2Meter.orm.yml'无效 '的appbundle \实体\ EM2Meter'。在 /Applications/MAMP/htdocs/iso50k1_tst_symfony/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/MappingException.php:86)“} []
我该如何解决这个问题?
答案 0 :(得分:2)
您还没有告诉symfony客户端在端口8000上联系localhost服务器,它仍然默认为80.
实例化客户端时,请指定这样的主机。
$client = static::createClient([], [
'HTTP_HOST' => 'localhost:8000',
] );
答案 1 :(得分:0)
这里看起来有一个缓存问题。我认为在运行测试之前和运行项目进行功能测试之前清理当前环境的缓存是一个好习惯:
$ php bin/console cache:clear --env=dev
$ php bin/console cache:clear --env=tests