加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Symfony2和phpunit:启用方法覆盖

发布时间:2020-12-13 22:48:18 所属栏目:PHP教程 来源:网络整理
导读:我刚刚开始使用Symfony2项目. CRUD生成工具创建了一个默认控制器和功能测试,我正在修改它以满足我的需要.控制器生成的编辑表单创建以下 HTML: form action="/app_dev.php/invoice/7" method="post" input type="hidden" name="_method" value="PUT" / !-- .
我刚刚开始使用Symfony2项目. CRUD生成工具创建了一个默认控制器和功能测试,我正在修改它以满足我的需要.控制器生成的编辑表单创建以下 HTML:

<form action="/app_dev.php/invoice/7" method="post" >
    <input type="hidden" name="_method" value="PUT" />
    <!-- ... -->
</form>

我喜欢重写HTTP方法的方法,因为它使我能够在我的应用程序中创建语义路由.现在我尝试使用以下功能测试来测试此表单:

$crawler = $client->click($crawler->selectLink('Edit')->link());
$form = $crawler->selectButton('Edit')->form(array(
    '_method' => 'PUT',// ...
));

$client->submit($form);
$this->assertEquals(302,$client->getResponse()->getStatusCode(),"Unexpected HTTP status code for POST /invoice/<id>/edit");

当我通过运行phpunit -c / app执行测试时,我的测试失败,因为状态代码是405而不是预期的302.

通过一些调试我发现响应是MethodNotAllowedHttpException.显然,当通过PHPUnit运行测试时,method overriding(内部将POST请求与_method = PUT参数组合映射到PUT请求)不会发生.

也就是说,我的问题是:在执行我的PHPUnit测试时,为什么symfony不会重写被覆盖的方法?

解决方法

form方法的第二个参数是http方法.试试这个:

$form = $crawler->selectButton('Edit')->form(array(
    // ...
),'PUT');

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读