发布于 2025-12-07 1 阅读
0

Laravel 10 中的 Pest PHP 测试框架

Laravel 10 中的 Pest PHP 测试框架

介绍

Laravel 是一个 Web 应用框架,拥有简洁优雅的语法。我们已经奠定了坚实的基础,让您能够自由地进行创作,无需为琐碎的事情操心。

自动化测试是指通过脚本而非人工执行测试计划(包括应用程序待测试的部分、测试顺序以及预期响应)。自动化测试能够快速返回结果,并且比人工测试更准确。

PHPUnit是一个 PHP 测试框架。它是单元测试框架 xUnit 架构的一个实例。

Pest是一个专注于简洁性的测试框架。它经过精心设计,旨在为 PHP 带来测试的乐趣。Pest 深受 Jest 的启发,

您可以使用各种不同的测试框架为您的 Laravel 应用程序编写测试,Laravel 版本 10 默认附带PHPUnit 支持。

除了 PHPUnit 之外,Laravel 还提供了各种实用的断言,使测试更轻松、更快捷。本教程中我们将使用Pest测试框架。

PestPHP 测试框架具有诸多优势,使其成为测试 PHP 应用程序的绝佳选择,尤其是在 Laravel 项目中。以下是使用 PestPHP 的一些主要优势:

  1. 简洁性:PestPHP 注重简洁性,旨在提供愉悦的测试体验。它提供直观、简洁的语法,易于阅读和编写。该框架鼓励您编写富有表现力且直观的测试,从而降低复杂性并提高代码的可维护性。

  2. 强大的断言:PestPHP 提供了丰富的断言功能,包括 PHPUnit 中的所有断言,让您能够编写简洁精准的测试。这些断言让您能够轻松验证应用程序的行为和状态,并且只需付出很少的努力。使用 PestPHP,您可以以自然易读的方式表达您的期望。

  3. 支持测试驱动开发 (TDD):PestPHP 旨在支持测试驱动开发 (TDD) 实践。它鼓励开发人员在实现相应功能之前编写测试。遵循 TDD 方法,您可以确保代码经过全面测试,从而提高代码质量并减少错误。

  4. 与 Laravel 集成:PestPHP 与 Laravel 无缝集成。它利用 Laravel 的测试基础架构,并提供额外的功能和增强功能。此集成使您能够高效地测试 Laravel 应用程序,并充分利用 Laravel 特有的功能,例如数据库种子、HTTP 测试等。

  5. 并行测试:PestPHP 支持并行测试,允许您同时运行测试。此功能显著缩短了整体测试执行时间,尤其适用于规模较大的测试套件。通过并行测试,您可以提高测试流程的效率,并更快地获得代码库健康状况的反馈。

  6. 社区和生态系统:PestPHP 受益于一个活跃且不断壮大的开发者社区。社区提供支持、资源和插件,使用户能够更轻松地采用并有效利用该框架。

总而言之,PestPHP 提供了简洁易用、强大的断言功能、TDD 支持、无缝集成 Laravel、并行测试以及蓬勃发展的社区。这些优势使其成为测试 PHP 应用程序的理想之选,让您能够编写简洁、富有表现力的测试,并确保代码的可靠性和质量。

要在 Laravel 中安装 Pest,我们将使用 Laravel 的 Pest 插件,它将安装 Pest 并使其与 Laravel 一起工作。

步骤 0. 创建新的 Laravel 项目

Composer使用或创建新的 Laravel 项目Laravel installer。我们将该项目命名为pest-laravel

使用 Composer 创建新的 Laravel 项目

composer create-project laravel/laravel pest-laravel
Enter fullscreen mode Exit fullscreen mode

或者使用 Laravel 安装程序

确保你已经通过运行安装了 Laravel 安装程序,此命令
将全局安装 Laravel 安装程序或更新到最新版本

composer global require laravel/installer
Enter fullscreen mode Exit fullscreen mode
laravel new pest-laravel
Enter fullscreen mode Exit fullscreen mode

步骤 0.1. 将目录更改为pest-laravel

cd pest-laravel
Enter fullscreen mode Exit fullscreen mode

步骤1.安装

Pest 是开发人员依赖项,这意味着它应该使用--dev标志进行安装。

# Install Pest plugin for Laravel
composer require pestphp/pest-plugin-laravel --dev

# Install/Auto Configure Pest in your Laravel project
# will add Pest.php file in your project ./tests directory
php artisan pest:install
Enter fullscreen mode Exit fullscreen mode

可选地在文件中添加测试脚本composer.json。这将允许你composer test在终端中运行测试。建议将测试脚本添加到composer.json文件中,以便其他开发人员只需运行composer test命令即可运行你的测试。

文件:composer.json

// ...
"scripts": {
    "test": "vendor/bin/pest"
}
// ...
Enter fullscreen mode Exit fullscreen mode

第 2 步:运行测试

要运行测试,您可以使用 test Artisan 命令。Artisan 测试运行器提供了一个便捷的 PHPUnit 和 Pest 包装器,允许您使用单个命令运行测试:

php artisan test
Enter fullscreen mode Exit fullscreen mode

或者您可以使用以下命令运行测试composer test:

composer test
Enter fullscreen mode Exit fullscreen mode

或者您可以使用以下命令运行测试vendor/bin/pest:

./vendor/bin/pest
Enter fullscreen mode Exit fullscreen mode

所有这些命令都会执行相同的测试。默认情况下,phpunit.xml应用程序中包含的文件将指示测试运行器排除 vendor 和 node_modules 目录中的测试。

步骤 3. 删除示例测试

新的 Laravel 项目附带一些示例测试。这些测试位于tests目录中。在新的 Laravel 项目中,tests目录中有两个目录:Feature和Unit。功能测试可能会测试代码的大部分内容,包括多个对象之间的交互方式,甚至包括对 JSON 端点的完整 HTTP 请求。另一方面,单元测试仅关注单个类。通常,应用程序中的每个类都会有一个相应的单元测试,该单元测试独立于应用程序的其余部分对该类进行测试。

我们将删除 Laravel 默认项目提供的示例测试。在tests目录中,删除以下文件:

rm tests/Unit/ExampleTest.php
rm tests/Feature/ExampleTest.php
Enter fullscreen mode Exit fullscreen mode

步骤 4. 创建新的 Pest 单元测试

在此步骤中,我们将为 Product 模型创建一个新的单元测试。我们将使用以下命令创建一个新的 Product 模型:

php artisan make:model Product -m
Enter fullscreen mode Exit fullscreen mode

不要忘记将name和price属性添加到products表迁移文件中。

文件:database/migrations/2023_06_11_000000_create_products_table.php

// ...
public function up()
{
    Schema::create('products', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->decimal('price', 8, 2);
        $table->timestamps();
    });
}
// ...
Enter fullscreen mode Exit fullscreen mode

然后使用以下命令运行迁移:

php artisan migrate
Enter fullscreen mode Exit fullscreen mode

然后我们将使用以下命令为产品模型创建一个新的单元测试:

php artisan pest:test ProductModelTest --unit
Enter fullscreen mode Exit fullscreen mode

在此单元测试中我们将测试

  1. 产品模型具有名称属性
  2. 产品型号有价格属性

将以下代码复制到ProductModelTest.php文件中

文件:ProductModelTest.php

it('has a name attribute', function () {
    $product = new Product([
        'name' => 'Product 1'
        'price' => 100
    ]);
    expect($product->name)->toBe('Product 1');
    expect($product->price)->toBe(100);
});
Enter fullscreen mode Exit fullscreen mode

步骤 5.创建产品控制器

在此步骤中,我们将使用以下命令创建一个新的产品控制器:

php artisan make:controller ProductController --resource
Enter fullscreen mode Exit fullscreen mode

ProductController.php然后在文件中添加以下代码

文件:ProductController.php

<?php

namespace App\Http\Controllers;

use App\Models\Product;

class ProductController extends Controller
{
    public function index()
    {
        $products = Product::all();
        return response()->json($products);
    }

    public function create()
    {
        $product = new Product([
            'name' => 'Product 1',
            'price' => 100
        ]);
        $product->save();
        return response()->json($product);
    }
}
Enter fullscreen mode Exit fullscreen mode

步骤 6. 将产品路线添加到routes/api.php

文件:routes/api.php

use App\Http\Controllers\ProductController;

Route::get('/products', [ProductController::class, 'index']);
Enter fullscreen mode Exit fullscreen mode

步骤 7. 创建新的 Pest 功能测试

php artisan pest:test ProductTest
Enter fullscreen mode Exit fullscreen mode

文件:ProductTest.php

it('can list products', function () {
    getJson('/products')->assertStatus(200);
});
it('can create a product', function () {
    $data = [
        'name' => 'Product 1',
        'price' => 100
    ];
    // 201 http created
    postJson('/products/create',$data)->assertStatus(201);
});
Enter fullscreen mode Exit fullscreen mode

itPest 中的vstest函数

该it函数是该函数的别名test。这两个函数完全相同,您可以在编写测试时使用其中任何一个。该it函数是为那些喜欢在编写测试时使用该it函数的开发人员提供的。

步骤 8. 运行测试

php artisan test
Enter fullscreen mode Exit fullscreen mode

或者您可以使用以下命令运行测试composer test:

composer test
Enter fullscreen mode Exit fullscreen mode

或者您可以使用以下命令运行测试vendor/bin/pest:

./vendor/bin/pest
Enter fullscreen mode Exit fullscreen mode

所有这些命令都会执行相同的测试。默认情况下,phpunit.xml应用程序中包含的文件将指示测试运行器排除 vendor 和 node_modules 目录中的测试。

如果您想运行特定的测试,您可以使用以下--filter选项:

php artisan test --filter ProductModelTest
Enter fullscreen mode Exit fullscreen mode

或者您可以使用以下命令运行测试composer test:

结论

在本教程中,我们探索了如何在 Laravel 项目中设置和使用 Pest 测试框架。我们讨论了使用 Pest 的优势,Pest 是一个专注于简洁性且受 Jest 启发的测试框架。通过遵循分步说明,您学习了如何在 Laravel 项目中安装 Pest、使用各种命令运行测试以及创建新的 Pest 单元测试和功能测试。

测试 Laravel 应用程序对于确保其质量和可靠性至关重要。Pest 提供直观的语法和强大的断言功能,使测试过程更加轻松高效。使用 Pest 编写测试,您可以创建可读且易于维护的代码,以验证 Laravel 应用程序功能的正确性。

记得定期运行测试,以便在开发早期发现任何错误或问题。测试不仅有助于发现问题,还能增强对代码库稳定性的信心。

因此,在您的 Laravel 项目中享受使用 Pest 测试的乐趣,让您的代码变得健壮、可靠和幽默!

祝您编码愉快!

文章来源:https://dev.to/alphaolomi/step-by-step-to-pest-php-testing-framework-in-laravel-10-6e1