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

如果您在编写 Laravel 测试时需要模拟外部 API 的响应,以避免实际发出 HTTP 请求,可以使用 Laravel 提供的 HTTP 客户端伪造功能。通过伪造 HTTP 客户端,您可以拦截请求并返回预定义的响应数据,从而提高测试速度和稳定性。
本文运行环境:MacBook Pro,macOS Sonoma
调用 Http::fake() 方法可以全局拦截所有由 Laravel HTTP 客户端发起的请求,并阻止它们发送到真实服务器。您可以在测试中预先定义特定 URL 或模式的响应内容。
1、在测试方法中引入 Illuminate\Support\Facades\Http。
2、调用 Http::fake() 来启用请求拦截。
3、使用 Http::withResponse() 或数组语法指定某些 URL 应返回的模拟响应。
您可以针对具体的 URL 或 URL 模式返回定制化的 JSON 响应或状态码,确保应用逻辑能正确处理各种场景。
1、使用 Http::fake([ 'api.example.com/users' => Http::response('{"id": 1, "name": "John"}', 200, ['Headers']) ]) 格式定义映射规则。
2、执行触发 HTTP 请求的业务代码,如调用服务类中的 getProfile() 方法。
3、验证返回结果是否与预设的模拟数据一致。
当需要匹配一组动态 URL(例如包含 ID 参数)时,可使用正则表达式作为键来定义伪造规则,实现灵活的请求拦截。
1、在 fake 数组中使用类似 '/users\/\d+/' 的正则表达式作为键名。
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怎么在测试中伪造(Fake)HTTP客户端请求_laravel测试中Fake HTTP请求方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号