Laravel怎么做单元测试_Laravel使用PHPUnit编写测试用例【指南】-Laravel

Laravel测试默认使用SQLite内存数据库隔离环境,运行php artisan make:test生成测试类后,通过php artisan test执行;需确保CSRF禁用、迁移已执行,并按层级(Feature/Unit)合理断言。

直接用 php artisan make:test 生成测试类,然后在 tests/Feature 或 tests/Unit 目录里写断言——但多数人卡在「测什么」和「怎么模拟真实请求/数据库」上。

怎么生成并运行一个基础测试用例

Laravel 默认已集成 PHPUnit,无需额外安装(除非你删了 phpunit.xml)。运行命令即可快速起步:

  • php artisan make:test UserRegistrationTest --feature → 生成到 tests/Feature,适合测 HTTP 流程
  • php artisan make:test UserRepositoryTest --unit → 生成到 tests/Unit,适合测模型、服务类等不依赖 HTTP 的逻辑
  • 运行单个测试:php artisan test --filter=UserRegistrationTest
  • 默认会读取 phpunit.xml 中的 DB_CONNECTION=sqlite 和 :memory: 配置,确保测试不污染本地数据库

为什么 $this->postJson() 返回 419 或 500 而不是预期响应

常见于未处理 CSRF 或数据库迁移未执行。Laravel 测试环境默认禁用 CSRF 验证,但如果你手动启用了中间件或用了自定义内核,就可能触发 TokenMismatchException。

  • 检查 app/Http/Kernel.php 中 api 或 web 中间件组是否误加了 VerifyCsrfToken
  • 确保测试类继承 Tests\TestCase(它自动设置了 WithoutMiddleware)
  • 若需测试带 CSRF 的表单提交,改用 $this->withSession(['_token' => 'xxx'])->post(...),但更推荐跳过验证
  • 500 错误常因迁移未跑:php artisan migrate:fresh --seed 在测试前执行一次,或在 TestCase::setUp(): void 中调用 Artisan::call('migrate:fresh')(注意性能)

如何安全地测试数据库操作而不清空生产数据

关键在隔离:Laravel 测试默认使用 SQLite 内存数据库,每次测试启动时重建,天然隔离。但如果你改了配置指向 MySQL,就容易出问题。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » Laravel怎么做单元测试_Laravel使用PHPUnit编写测试用例【指南】-Laravel
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4023028+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4023028+
  • 本周更新: 0+
  • 最后更新: 2026-03-16