我正在使用Laravel 5.4
web.php
Route::delete('claim/{id?}', 'ClaimController@claimRemove');
myTest.php
$response = $this->json('delete', 'claim', [
'id' => $id
]);
当我运行phpunit时,我正在使用
MethodNotAllowedHttpException
但是如果我通过Postman或phpstorm rest客户端运行它 - 它工作正常,所以原因是$this->json
方法中的某个地方。我也试过了$this->call
。
如果我将删除方法切换为在web.php和我的测试文件中发布 - 测试正在通过。
所以,问题是 - 为什么它不能使用DELETE方法或如何测试DELETE调用?:)
感谢。
答案 0 :(得分:1)
好像是版本问题。没有修改任何东西,但两周之后只有composer update
并且测试通过了。
答案 1 :(得分:0)
您定义路线的方式,需要在URL中传递ID。
替换
$response = $this->json('delete', 'claim', [
'id' => $id
]);
与
$response = $this->json('delete', 'claim/' . $id, []);
答案 2 :(得分:0)
如果composer update
只是解决了您的问题,听起来您的路线缓存尚未使用最新的路线更改进行更新。 composer update
和composer install
通常都包含工匠命令列表,例如route:clear
,因为使用optimize
时会在composer.json文件中间接指定它们。
第二,由于ID是您路线的一部分,因此请在下面使用此表格,否则它将在没有ID的情况下到达该路线。但是,这也是可以接受的,因为您已将参数设为可选。
$response = $this->json('delete', 'claim/' . $id, []);