未经授权的用户在使用 phpunit 测试时返回状态 500 而不是 401

Posted

技术标签:

【中文标题】未经授权的用户在使用 phpunit 测试时返回状态 500 而不是 401【英文标题】:Unauthorized users return status 500 instead of 401 when using phpunit test 【发布时间】:2019-12-01 15:28:03 【问题描述】:

我正在与 buddy.works 合作,以持续集成我的项目。问题是,我的 phpunit 测试在我的本地计算机上通过,但在伙伴工作管道上失败。

我已经尝试谷歌搜索和阅读两天多了,虽然我发现了许多类似的问题,但我还没有遇到一个甚至可以为我指明正确方向的解决方案。

    public function test_orders_route_unauthenticated_user () 

        $data = [
            'orderID'      => '001241',
            'sku'          => '123456',
            'quantity'     => 9,
            'pricePerUnit' => 78,
            'priceTotal'   => 702,
        ];

        $this->json('POST', 'api/orders', [$data])->assertStatus(401);

    

测试失败,状态码为 500 而不是 401,我不知道是什么原因造成的。

编辑: Laravel 5.8.17,与它集成的 php 单元,可以按预期工作,直到在 buddy works 上运行。

【问题讨论】:

您的日志怎么说? 500 应该留下一个条目 500 表示服务器错误,因此您甚至没有到达端点。尝试查看您的日志。使用 $this->withoutExceptionHandling() 获取完整的堆栈跟踪。 不幸的是,我无法访问日志,因为在我的机器上它工作正常,只有当好友运行测试时它才会失败。 Tests\Feature\ProductsControllerTest::test_products_route_unauthenticated_user 预期状态码 401 但收到 500。未能断言 false 为真。 /buddy/management-products-api-3/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php:133 /buddy/management-products-api-3/tests/Feature/ProductsControllerTest.php:45失败! 你是否使用 Postman 或其他工具来测试你的 API。因为显然您的api/orders 无法访问,因此是 500。您必须检查应用程序是否在服务器上运行。 【参考方案1】:

在测试我的 laravel 8 api 时遇到了同样的问题。 我必须在请求中发送标头。

public function testGetUsersWithoutAuthentication()

    $response = $this->withHeaders(['Accept' => 'application/json',])->get('api/users');
    $response->assertStatus(401);

【讨论】:

这是一个路由问题,因为它试图将您重定向到登录页面...但它是一个 api...我怀疑您没有登录网页,这很好

以上是关于未经授权的用户在使用 phpunit 测试时返回状态 500 而不是 401的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 5.5 中使用 phpunit 测试中间件?

Spring Security 测试返回 401(未经授权)

Wso2用户未经授权

护照-jwt 总是返回“未经授权” - 401

通过 api.php 的路由返回未经授权,而通过 web.php 的相同路由有效

在刷新身份验证令牌时处理多个未经授权的请求