mcpField
L
laravel-quality

laravel-quality

github.com/leeovery测试与质量1558 次安装2 周前更新
代码仓库

关于 laravel-quality

为 Laravel 项目提供测试、静态分析和代码风格检查方面的质量实践指南。内容涵盖 Pest、PHPStan、Laravel Pint,以及将检查纳入 CI 和提交流程。

主要功能

  1. 01使用 Pest 编写测试
  2. 02配置 PHPStan 静态分析
  3. 03通过 Laravel Pint 检查风格
  4. 04设置 CI 与提交前检查

适用场景

  1. 01为 Laravel 项目建立质量检查流程
  2. 02在提交前运行测试与分析
  3. 03通过架构测试检查项目约定

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/leeovery/agentic-skills --skill laravel-quality

安装后在 Claude Code 中输入/laravel-quality确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
architecture-tests.md
code-style.md
type-safety.md

详细介绍

Laravel 质量

测试、静态分析和代码质量规范。

相关指南:

质量工具栈

# 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 缺少单元测试
  • 关键路径的覆盖率低
  • 脆弱的测试(使用过多模拟对象)

执行策略

  1. 架构测试 - 自动化检查
  2. PR 审查 - 人工验证
  3. CI/CD 门禁 - 阻止未通过的构建
  4. 团队规范 - 编写文档并开展培训
  5. 结对编程 - 分享知识

评论

支持 Markdown