【问题标题】:Laravel PHPUnit returning 404Laravel PHPUnit 返回 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');

标签: php laravel phpunit testcase laravel-7.x


【解决方案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,它对我有用。

    【讨论】:

      猜你喜欢
      • 2018-05-03
      • 2020-11-11
      • 2021-12-13
      • 2016-02-04
      • 2019-07-26
      • 1970-01-01
      • 2016-11-18
      • 2020-12-09
      • 2019-09-05
      相关资源
      最近更新 更多