未经授权的用户在使用 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(未经授权)