Laravel功能测试无法发出DELETE请求

时间:2017-02-17 12:17:06

标签: laravel phpunit

我正在使用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调用?:)

感谢。

3 个答案:

答案 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 updatecomposer install通常都包含工匠命令列表,例如route:clear,因为使用optimize时会在composer.json文件中间接指定它们。

第二,由于ID是您路线的一部分,因此请在下面使用此表格,否则它将在没有ID的情况下到达该路线。但是,这也是可以接受的,因为您已将参数设为可选。

$response = $this->json('delete', 'claim/' . $id, []);