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 测试期间返回 302 而不是 404 响应
Laravel 5.4 上的示例 PHPUnit 测试失败并显示 404
PHPUnit:预期状态码 200 但使用 Laravel 收到 419
在运行 laravel phpunit testcase 时,我在 Model.php 第 1249 行收到错误“调用 null 上的成员函数 connection()”