0

0

laravel怎么在测试中伪造(Fake)HTTP客户端请求_laravel测试中Fake HTTP请求方法

裘德小鎮的故事

裘德小鎮的故事

发布时间:2025-10-20 10:49:01

|

875人浏览过

|

来源于php中文网

原创

使用 Http::fake() 可模拟 Laravel 中的外部 API 响应,避免真实请求。通过指定 URL 或正则匹配返回预定义数据,如 JSON 或错误状态码,支持为不同场景定制响应。还能验证请求是否按预期发出,包括断言请求次数、URL、头信息和参数,确保集成逻辑正确。

laravel怎么在测试中伪造(fake)http客户端请求_laravel测试中fake http请求方法

如果您在编写 Laravel 测试时需要模拟外部 API 的响应,以避免实际发出 HTTP 请求,可以使用 Laravel 提供的 HTTP 客户端伪造功能。通过伪造 HTTP 客户端,您可以拦截请求并返回预定义的响应数据,从而提高测试速度和稳定性。

本文运行环境:MacBook Pro,macOS Sonoma

一、使用 Http::fake() 伪造所有请求

调用 Http::fake() 方法可以全局拦截所有由 Laravel HTTP 客户端发起的请求,并阻止它们发送到真实服务器。您可以在测试中预先定义特定 URL 或模式的响应内容。

1、在测试方法中引入 Illuminate\Support\Facades\Http。

2、调用 Http::fake() 来启用请求拦截。

3、使用 Http::withResponse() 或数组语法指定某些 URL 应返回的模拟响应。

二、为特定 URL 模拟响应

您可以针对具体的 URL 或 URL 模式返回定制化的 JSON 响应或状态码,确保应用逻辑能正确处理各种场景。

1、使用 Http::fake([ 'api.example.com/users' => Http::response('{"id": 1, "name": "John"}', 200, ['Headers']) ]) 格式定义映射规则。

2、执行触发 HTTP 请求的业务代码,如调用服务类中的 getProfile() 方法。

3、验证返回结果是否与预设的模拟数据一致。

三、使用正则表达式匹配请求 URL

当需要匹配一组动态 URL(例如包含 ID 参数)时,可使用正则表达式作为键来定义伪造规则,实现灵活的请求拦截。

1、在 fake 数组中使用类似 '/users\/\d+/' 的正则表达式作为键名。

晓象AI资讯阅读神器
晓象AI资讯阅读神器

晓象-AI时代的资讯阅读神器

下载

2、为其分配一个响应生成器,例如使用 Closure 返回不同状态码。

3、确保被测代码访问符合该模式的 URL,以便命中伪造规则。

四、模拟异常和错误响应

为了测试错误处理逻辑,可以通过伪造客户端返回 404、500 等状态码,或抛出连接异常来验证程序健壮性。

1、使用 Http::response('', 500) 返回服务器错误。

2、或者调用 Http::fake([ '*' => Http::response()->throwException(new ConnectionException()) ]) 模拟网络中断。

3、运行测试流程并断言异常被捕获且降级逻辑被执行。

五、断言请求是否按预期发出

Laravel 允许在测试中验证 HTTP 客户端是否向指定地址发送了请求,并检查请求头、查询参数和请求体内容。

1、在调用业务逻辑后,使用 Http::assertSent(function (Request $request) {}) 进行断言。

2、在闭包中检查请求的 method、url、body 或 headers 是否符合预期。

3、也可使用 Http::assertSentCount(2) 验证请求发送次数。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

316

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

275

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

369

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

371

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

81

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

64

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

67

2025.08.05

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

412

2023.08.07

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

23

2026.01.19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 2万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号