关于 laravel-quality
为 Laravel 项目提供测试、静态分析和代码风格检查方面的质量实践指南。内容涵盖 Pest、PHPStan、Laravel Pint,以及将检查纳入 CI 和提交流程。
主要功能
- 01使用 Pest 编写测试
- 02配置 PHPStan 静态分析
- 03通过 Laravel Pint 检查风格
- 04设置 CI 与提交前检查
适用场景
- 01为 Laravel 项目建立质量检查流程
- 02在提交前运行测试与分析
- 03通过架构测试检查项目约定
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ leeovery/ agentic-skills --skill laravel-quality安装后在 Claude Code 中输入/laravel-quality确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/architecture-tests.mdcode-style.mdtype-safety.md详细介绍
Laravel 质量
测试、静态分析和代码质量规范。
相关指南:
- code-style.md - Laravel Pint 配置和编码风格
- type-safety.md - 严格类型和类型提示
- Testing - 综合测试指南
质量工具栈
# composer.json scripts
{
"test": "pest",
"analyse": "phpstan analyse",
"format": "pint",
"quality": [
"@analyse",
"@test"
]
}
所有文件顶部都必须包含 declare(strict_types=1)。每次提交前运行质量检查。
架构测试(Pest)
在适合项目的情况下,使用 Pest 架构测试来强制执行约定。
→ 架构测试示例:architecture-tests.md
静态分析(PHPStan)
安装
composer require phpstan/phpstan --dev
composer require phpstan/phpstan-strict-rules --dev
composer require larastan/larastan --dev
配置
phpstan.neon
includes:
- vendor/larastan/larastan/extension.neon
- vendor/phpstan/phpstan-strict-rules/rules.neon
parameters:
level: 5 # Minimum 5, increase per-project as practical (up to 8)
paths:
- app
- tests
excludePaths:
- app/Providers/TelescopeServiceProvider.php
checkMissingIterableValueType: true
checkGenericClassInNonGenericObjectType: true
reportUnmatchedIgnoredErrors: false
运行
./vendor/bin/phpstan analyse
代码风格(Laravel Pint)
安装
composer require laravel/pint --dev
配置
pint.json
{
"preset": "laravel",
"rules": {
"simplified_null_return": true,
"no_unused_imports": true,
"ordered_imports": {
"sort_algorithm": "alpha"
}
}
}
运行
./vendor/bin/pint
./vendor/bin/pint --test # Check only
测试覆盖率
启用覆盖率(Pest)
phpunit.xml
<coverage>
<report>
<html outputDirectory="coverage"/>
<text outputFile="php://stdout"/>
</report>
</coverage>
运行并生成覆盖率报告
./vendor/bin/pest --coverage
./vendor/bin/pest --coverage --min=80 # Enforce minimum
CI/CD 检查
GitHub Actions 示例
.github/workflows/tests.yml
name: Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: 8.4
extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite
coverage: xdebug
- name: Install Dependencies
run: composer install --prefer-dist --no-interaction
- name: Code Style
run: ./vendor/bin/pint --test
- name: Static Analysis
run: ./vendor/bin/phpstan analyse
- name: Run Tests
run: ./vendor/bin/pest --coverage --min=80
提交前钩子
安装
composer require brainmaestro/composer-git-hooks --dev
配置
composer.json
{
"extra": {
"hooks": {
"pre-commit": [
"./vendor/bin/pint",
"./vendor/bin/phpstan analyse",
"./vendor/bin/pest"
]
}
},
"scripts": {
"post-install-cmd": "vendor/bin/cghooks add --ignore-lock",
"post-update-cmd": "vendor/bin/cghooks update"
}
}
质量指标
跟踪内容
- 测试覆盖率 - 目标为 80% 以上
- PHPStan 级别 - 8 级(最高)
- 架构测试通过率 - 100%
- 代码风格违规数 - 0
定期审查
- 每周 - 检查测试覆盖率趋势
- 每次 PR - 运行所有质量检查
- 每月 - 审查架构合规情况
- 发布时 - 全面质量审计
需要留意的常见问题
反模式
- 在控制器中编写领域逻辑
- 使用作用域而非构建器
- 缺少严格类型声明
- 传递基本类型而非 DTO
- 在 Job/Listener 中编写领域逻辑
类型安全
- 缺少返回类型
- 缺少参数类型
- 缺少属性类型
- 数组/集合未指定类型
测试
- 端点缺少功能测试
- Action 缺少单元测试
- 关键路径的覆盖率低
- 脆弱的测试(使用过多模拟对象)
执行策略
- 架构测试 - 自动化检查
- PR 审查 - 人工验证
- CI/CD 门禁 - 阻止未通过的构建
- 团队规范 - 编写文档并开展培训
- 结对编程 - 分享知识
评论
支持 Markdown