跳转到主要内容

什么是 Testbench Workbench

Orchestra Testbench 面向测试,但结合 Workbench 后可以在包仓库内构建一个小型 Laravel 应用,可以在本地跑起来。 它用于补充 package-testing 中的测试,方便进行 UI 检查、路由联调、带 Seeder 的验证等。

搭建

1

安装 Testbench

composer require --dev orchestra/testbench
2

创建 Workbench

vendor/bin/testbench workbench:install
该命令会一次完成:
  • 创建 workbench/ 目录结构
  • composer.jsonautoload-dev 添加 Workbench 命名空间
  • composer.jsonscripts 添加构建用命令
附加选项:
  • --force:覆盖已有文件
  • --basic:省略路由与包 discovery 配置的简洁结构
  • --devtool:启用 DevTool 支持
3

构建并启动

composer clear
composer prepare
composer build
vendor/bin/testbench serve
workbench:install 会一次性搭建 workbench/ 目录、autoload-dev 与相关脚本。
安装后,composer.json 会新增以下脚本。
{
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/",
            "Workbench\\App\\": "workbench/app/",
            "Workbench\\Database\\Factories\\": "workbench/database/factories/",
            "Workbench\\Database\\Seeders\\": "workbench/database/seeders/"
        }
    },
    "scripts": {
        "post-autoload-dump": [
            "@clear",
            "@prepare"
        ],
        "clear": "@php vendor/bin/testbench package:purge-skeleton --ansi",
        "prepare": "@php vendor/bin/testbench package:discover --ansi",
        "build": "@php vendor/bin/testbench workbench:build --ansi",
        "serve": [
            "Composer\\Config::disableProcessTimeout",
            "@build",
            "@php vendor/bin/testbench serve --ansi"
        ]
    }
}

用 testbench.yaml 定义开发环境

Workbench 的行为由放在根目录的 testbench.yaml 控制。
testbench.yaml 中常包含随环境不同而变的设置,建议加入 .gitignore 不提交。可以准备 testbench.yaml.example 作为模板放入仓库。
providers:
  - Vendor\Package\PackageServiceProvider
  - Workbench\App\Providers\WorkbenchServiceProvider

migrations:
  - workbench/database/migrations

workbench:
  start: '/'
  install: true
  health: false
  discovers:
    web: true
    api: false
    commands: false
    components: false
    views: false
    config: true
  build:
    - asset-publish
    - create-sqlite-db
    - db-wipe
    - migrate-fresh:
        --seed: true
        --seeder: Workbench\Database\Seeders\DatabaseSeeder
  assets:
    - laravel-assets
主要配置项:
说明
providersWorkbench 环境加载的 Service Provider 列表
migrations要执行的迁移目录
workbench.startcomposer serve 启动时的默认 URL
workbench.discovers控制 Laravel 包自动发现的对象
workbench.build构建时执行的命令列表
环境变量也可以在 testbench.yaml 中管理。
env:
  - APP_ENV=testing
  - APP_KEY=base64:your-app-key
  - DB_CONNECTION=sqlite
  - DB_DATABASE=:memory:

workbench 目录结构

workbench
app
Models
bootstrap
config
database
factories
migrations
public
storage

Workbench 提供的主要功能

WorkbenchServiceProvider

创建 Workbench 专用 Service Provider,用于演示相关的注册处理。
<?php

namespace Workbench\App\Providers;

use Illuminate\Support\ServiceProvider;
use Vendor\Package\SomeClass;
use Workbench\App\Services\DemoService;

class WorkbenchServiceProvider extends ServiceProvider
{
    public function register(): void
    {
        $this->app->singleton(DemoService::class);
    }

    public function boot(): void
    {
        SomeClass::register('demo', DemoService::class);
        $this->loadRoutesFrom(__DIR__.'/../../routes/web.php');
        $this->loadViewsFrom(__DIR__.'/../../resources/views', 'workbench');
    }
}

路由与 Controller

可以在 workbench/routes/web.phpworkbench/routes/api.php 放置验证用路由。
use Illuminate\Support\Facades\Route;
use Vendor\Package\Facades\Package;

Route::get('/', function () {
    return Package::status();
});

迁移与 Seeder

workbench/database/migrationsworkbench/database/seeders 可用于以接近生产的数据结构验证。
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

Schema::create('widgets', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->timestamps();
});
用 Seeder 生成测试数据。
<?php

namespace Workbench\Database\Seeders;

use Illuminate\Database\Seeder;
use Workbench\Database\Factories\UserFactory;

class DatabaseSeeder extends Seeder
{
    public function run(): void
    {
        UserFactory::new()->count(10)->create();
    }
}

启动服务与 CLI 确认

可通过 vendor/bin/testbench 执行 Artisan 命令。
vendor/bin/testbench list
vendor/bin/testbench route:list
vendor/bin/testbench migrate:fresh --seed

使用 WithWorkbench trait 进行测试

使用 WithWorkbench trait,可以将 testbench.yaml 的配置自动应用到测试中。
<?php

namespace Tests;

use Orchestra\Testbench\Concerns\WithWorkbench;
use Orchestra\Testbench\TestCase as Orchestra;

abstract class TestCase extends Orchestra
{
    use WithWorkbench;

    protected function getPackageProviders($app): array
    {
        return [
            \Vendor\Package\Providers\YourServiceProvider::class,
        ];
    }

    protected function defineEnvironment($app): void
    {
        $app['config']->set('database.default', 'testing');
        $app['config']->set('your-package.key', 'test-value');
    }
}

与测试的联动

将 Workbench 用作「手动检查、演示应用」,Testbench 测试代码用作「自动验证」,可以让运营更顺畅。
  • 自动化:tests/ 防止回归
  • 手动确认:workbench/ 验证界面、动线、集成行为

故障排查

# 清理并完整重建
composer clear && composer prepare && composer build

# 确认包自动发现
vendor/bin/testbench package:discover --ansi

# 查看设置
vendor/bin/testbench about

# 查看路由列表
vendor/bin/testbench route:list
请确认 testbench.yaml 的语法与 Provider 设置。可能是 YAML 缩进错误。
确认路由文件路径以及 WorkbenchServiceProvider 的注册。检查 testbench.yamldiscovers.web 是否为 true
确认迁移路径是否正确。若使用 SQLite,检查是否包含 create-sqlite-db 构建步骤。

相关页面

使用 Orchestra Testbench 测试 Laravel 包

先了解包测试基础设施的搭建方法。

包的版本兼容性管理

了解 Laravel 与 Testbench 的对应关系以及 CI 矩阵运营。
最后修改于 2026年7月13日