Laravel 通过添加 requestException() 来增强开发人员的测试能力,这是一个便捷的方法,可以简化创建 HTTP 客户端异常的过程,从而实现更有效的错误测试。
测试外部 API 交互需要模拟各种错误响应,以验证异常处理是否正确。以前,创建 RequestException 需要编写冗长且多步骤的代码。新的 requestException() 方法提供了一种简洁优雅的替代方案:
使用
照亮\支持\立面\HTTP
;// 创建一个具有特定响应正文和状态码的请求异常$异常
=
Http
::
requestException
([
'错误'
=>
'无效令牌'
],
401
(英文):// 创建一个仅包含状态码的请求异常$异常
=
Http
::
requestException
(
地位
:
500
(英文):// 创建带有请求头的请求异常$异常
=
Http
::
requestException
([
'信息'
=>
“请求太多了”
],
429
,[
'X-RateLimit-Reset'
=>
‘30’
](英文):
可读性提升显著:
// 之前:冗长、多步骤的过程$异常
=
新的
请求异常
(
新的
回复
(
Http
::
回复
([
'代码'
=>
'无效令牌'
],
401
)
->
等待
())(英文):// 之后:简洁的单行方法$异常
=
Http
::
requestException
([
'代码'
=>
'无效令牌'
],
401
(英文):
这种方法尤其适用于测试与外部 API 交互的服务:
班级
支付网关测试
延伸
测试用例{
民众
功能
test_it_handles_api_authentication_errors
(){
Http
::
伪造的
([
'api.payment.com/*'
=>
Http
::
回复
([
'错误'
=>
“无效的 API 密钥”
],
401
),]);
// 测试服务对 401 错误的处理$gateway
=
新的
支付网关
();$结果
=
$gateway
->
处理付款
(支付数据)
$this
->
断言错误
(结果)
->
成功);
$this
->
断言等于
(
'authentication_failed'
,$result
->
错误);
// 使用 throw-catch 方法测试异常处理
尝试
{
// 模拟 HTTP 客户端抛出异常
Http
::
伪造的
(
功能
(){
扔
Http
::
requestException
([
'错误'
=>
“无效的 API 密钥”
],
401
(英文):});$gateway
->
processPaymentOrFail
(支付数据)
$this
->
失败
(
未抛出异常
(英文):}
抓住
(
PaymentAuthenticationException
$e) {
$this
->
断言等于
(
401
,$e
->
获取状态码
());
$this
->
断言等于
(
“无效的 API 密钥”
,$e
->
获取错误消息
());}}}
requestException() 方法为 HTTP 交互错误处理创建了更简洁、更易于维护的测试,提高了代码质量,同时降低了测试的复杂性。






