Laravel 10 中的 Pest PHP 测试框架

2025-06-04

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目录中有两个目录:FeatureUnit。功能测试可能会测试代码的大部分内容,包括多个对象之间的交互方式,甚至包括对 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

不要忘记将nameprice属性添加到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
PREV
Javascript——解构事物!
NEXT
2021 年完整的全栈路线图(包含资源 + 基于经验)