Laravel PHPUnit 返回 404

Posted

技术标签:

【中文标题】Laravel PHPUnit 返回 404【英文标题】:Laravel PHPUnit returning 404 【发布时间】:2020-11-30 02:20:50 【问题描述】:

对于 laravel API,我已经编写了测试用例。但是每当我运行测试用例时,它总是失败并出现以下错误,

1) Tests\Feature\CompanyTest::orgTest
Expected status code 200 but received 404.
Failed asserting that 200 is identical to 404.

$this->withoutExceptionHandling(); 添加到测试用例代码后,它返回以下错误,

1) Tests\Feature\CompanyTest::orgTest
Symfony\Component\HttpKernel\Exception\NotFoundHttpException: POST domainname/index.php/api/company

/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithExceptionHandling.php:126
/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:415
/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:113
/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:507
/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:473
/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:332
/tests/Feature/CompanyTest.php:21

我在测试文件中的代码是,

public function orgTest()
    
        $requestData = ["organizationId" => 10,"offset"=>1,"limit"=>10,"notificationId"=>""];
        $response = $this->withoutExceptionHandling();
        $response->postJson('/index.php/api/company',$requestData);
        $response->assertStatus(200);
    

我搜索了错误并尝试了许多解决方案,但都无法成功。任何人都请告诉我这是什么问题。

【问题讨论】:

发布到/api/company,HTTP 测试将查找路由并直接调用它。 @apokryfos 尝试但没有成功 你能在routes/api.php中显示使用你的路由声明吗? @gbalduzzi 我在 routes/api.php 中的路线是 Route::any('company','CompanyController@companyindex'); 【参考方案1】:

这是一个404错误,所以你的网页没有找到:

Symfony\Component\HttpKernel\Exception\NotFoundHttpException: POST domainname/index.php/api/company

不好的方式,发布到/api/company/index.php/api/company 但不是“域名”!

如果它不起作用,请检查该 api 路由的路由配置。你的控制器和动作声明得好吗?

【讨论】:

我只尝试过/index.php/api/company。另外,我可以从邮递员那里访问这个 API 你在邮递员里面放了哪个网址?您是否在您的操作代码中进行了一些检查并只允许一些 HTTP 方法,即 GET 被拒绝、POST ok ? 我将与域名相同的 URL 放在邮递员中,并且它可以正常工作。另外,我试过了,post issue是一样的。 hmm 很奇怪...如果我是你,我会非常仔细地检查操作代码和路由配置,以检查两次所有内容的格式是否正确。我会用/api/company做一些测试。 你有没有学过类似这样的教程:medium.com/@mscherrenberg/…【参考方案2】:

404 代码表示在指定路线上找不到任何东西。它可能是您指定的路线index.php/api/company。尝试路由到[host:port]/api/company

【讨论】:

【参考方案3】:

默认情况下,laravel 的路由并没有明确显示它是一个 php 文件,而是它具有您决定路由文件的专用端点。所以 index.php 不应该是 laravel 的有效路由。

404 error 状态代码指的是未找到错误。无论您使用的是 web.php 还是 api.php,您尝试访问的 api url 可能与路由文件中的不匹配。

我建议在项目的基本路径上使用php artisan route:list 以正确查看您想要的路由已注册并从那里匹配。

【讨论】:

我检查了路由列表及其尝试访问的相同 URL【参考方案4】:

在我看来,PHPUnit 不仅找不到这个 URL,而且找不到整个网站。您可以在测试中通过请求“/”来检查它。

如果我是对的,首先,我建议检查.env.testing 中的参数APP_URL。通常,我将其设置为APP_URL=http://localhost,它对我有用。

【讨论】:

以上是关于Laravel PHPUnit 返回 404的主要内容,如果未能解决你的问题,请参考以下文章

Laravel PHPUnit 返回 404

Laravel 路由仅在 phpunit 测试期间返回 302 而不是 404 响应

Laravel 5.4 上的示例 PHPUnit 测试失败并显示 404

PHPUnit:预期状态码 200 但使用 Laravel 收到 419

PHPUnit / Lumen 总是返回 404

在运行 laravel phpunit testcase 时,我在 Model.php 第 1249 行收到错误“调用 null 上的成员函数 connection()”