Laravel 测试 api Post MethodNotAllowedHttpException

Posted

技术标签:

【中文标题】Laravel 测试 api Post MethodNotAllowedHttpException【英文标题】:Laravel Test api Post MethodNotAllowedHttpException 【发布时间】:2019-07-30 14:07:18 【问题描述】:

您好,我正在使用 Laravel 5.5 并且在我的测试中

public function testCreate()
    
        $userAdmin = factory(User::class)->create();
        $roleAdmin = Role::where('name', 'admin')->first();

        $userAdmin->roles()->attach($roleAdmin);

        $this->actingAs($userAdmin)->post('/api/object/create')
            ->assertJson(["success"=>true]);
    

在我的路线中:

Route::group(['middleware' => 'auth:api'], function () 
   Route::group(['prefix'=>'object'], function()
      Route::post('create', 'ObjectController@create')->middleware('can:create,App\Models\Object');
   );
);

但是当我运行测试返回时:

Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException

我已经尝试清除我的路线:

php artisan route:cache

还有:

$this->actingAs($userAdmin, 'api')->post('/api/object/create')

还有

$this->actingAs($userAdmin, 'api')->post('/object/create')

我在中间件 API 中使用的 Policy 函数是:

public function create(User $user)
   return $user->isAdmin();

但它不起作用。我哪里错了?

【问题讨论】:

php artisan route:list 的输出是什么?这条路线是在web.php 还是api.php 它在 api.php 中,输出为:POST | api/对象/创建||应用\Http\Controllers\ObjectController@create | api,auth:api,can:create,App\Models\Object 您说您尝试使用php artisan route:cache 清除路线,但要清除路线您将使用route:clear。您是否使用了错误的命令,或者这只是问题中的错误? 您能否在问题中包含route:list 的完整输出?我试图排除另一个无意匹配请求的路由,而不是预期的路由定义。 【参考方案1】:

您需要登录,因为您有身份验证中间件。

【讨论】:

以上是关于Laravel 测试 api Post MethodNotAllowedHttpException的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 8 api post route 无法正常工作

Laravel Cors 中间件不适用于 POST 请求

Laravel 5:如何测试调用API的Jobs?

如何为邮递员 API 请求编写 Laravel PHPUnit 测试

Laravel 仅在单元测试期间持续存在

如何从外部 API 获取 $_POST 数据 - LARAVEL