gpt4 book ai didi

Symfony2 和 phpunit : enable method override

转载 作者:行者123 更新时间:2023-12-01 05:22:35 26 4
gpt4 key购买 nike

我刚刚开始了一个 Symfony2 项目。 CRUD 生成工具创建了一个默认 Controller 和功能测试,我正在对其进行修改以满足我的需要。 Controller 生成的编辑表单创建以下 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');

关于Symfony2 和 phpunit : enable method override,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15701723/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com