Laravel 10 中的 Pest PHP 测试框架
介绍
Laravel 是一个 Web 应用框架,拥有简洁优雅的语法。我们已经奠定了坚实的基础,让您能够自由地进行创作,无需为琐碎的事情操心。
自动化测试是指通过脚本而非人工执行测试计划(包括应用程序待测试的部分、测试顺序以及预期响应)。自动化测试能够快速返回结果,并且比人工测试更准确。
PHPUnit是一个 PHP 测试框架。它是单元测试框架 xUnit 架构的一个实例。
Pest是一个专注于简洁性的测试框架。它经过精心设计,旨在为 PHP 带来测试的乐趣。Pest 深受 Jest 的启发,
您可以使用各种不同的测试框架为您的 Laravel 应用程序编写测试,Laravel 版本 10 默认附带PHPUnit 支持。
除了 PHPUnit 之外,Laravel 还提供了各种实用的断言,使测试更轻松、更快捷。本教程中我们将使用Pest测试框架。
PestPHP 测试框架具有诸多优势,使其成为测试 PHP 应用程序的绝佳选择,尤其是在 Laravel 项目中。以下是使用 PestPHP 的一些主要优势:
-
简洁性:PestPHP 注重简洁性,旨在提供愉悦的测试体验。它提供直观、简洁的语法,易于阅读和编写。该框架鼓励您编写富有表现力且直观的测试,从而降低复杂性并提高代码的可维护性。
-
强大的断言:PestPHP 提供了丰富的断言功能,包括 PHPUnit 中的所有断言,让您能够编写简洁精准的测试。这些断言让您能够轻松验证应用程序的行为和状态,并且只需付出很少的努力。使用 PestPHP,您可以以自然易读的方式表达您的期望。
-
支持测试驱动开发 (TDD):PestPHP 旨在支持测试驱动开发 (TDD) 实践。它鼓励开发人员在实现相应功能之前编写测试。遵循 TDD 方法,您可以确保代码经过全面测试,从而提高代码质量并减少错误。
-
与 Laravel 集成:PestPHP 与 Laravel 无缝集成。它利用 Laravel 的测试基础架构,并提供额外的功能和增强功能。此集成使您能够高效地测试 Laravel 应用程序,并充分利用 Laravel 特有的功能,例如数据库种子、HTTP 测试等。
-
并行测试:PestPHP 支持并行测试,允许您同时运行测试。此功能显著缩短了整体测试执行时间,尤其适用于规模较大的测试套件。通过并行测试,您可以提高测试流程的效率,并更快地获得代码库健康状况的反馈。
-
社区和生态系统: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
或者使用 Laravel 安装程序
确保你已经通过运行安装了 Laravel 安装程序,此命令
将全局安装 Laravel 安装程序或更新到最新版本
composer global require laravel/installer
laravel new pest-laravel
步骤 0.1. 将目录更改为pest-laravel
cd pest-laravel
步骤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
可选地在文件中添加测试脚本composer.json
。这将允许你composer test
在终端中运行测试。建议将测试脚本添加到composer.json
文件中,以便其他开发人员只需运行composer test
命令即可运行你的测试。
文件:composer.json
// ...
"scripts": {
"test": "vendor/bin/pest"
}
// ...
第 2 步:运行测试
要运行测试,您可以使用 test Artisan 命令。Artisan 测试运行器提供了一个便捷的 PHPUnit 和 Pest 包装器,允许您使用单个命令运行测试:
php artisan test
或者您可以使用以下命令运行测试composer test
:
composer test
或者您可以使用以下命令运行测试vendor/bin/pest
:
./vendor/bin/pest
所有这些命令都会执行相同的测试。默认情况下,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
步骤 4. 创建新的 Pest 单元测试
在此步骤中,我们将为 Product 模型创建一个新的单元测试。我们将使用以下命令创建一个新的 Product 模型:
php artisan make:model Product -m
不要忘记将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();
});
}
// ...
然后使用以下命令运行迁移:
php artisan migrate
然后我们将使用以下命令为产品模型创建一个新的单元测试:
php artisan pest:test ProductModelTest --unit
在此单元测试中我们将测试
- 产品模型具有名称属性
- 产品型号有价格属性
将以下代码复制到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);
});
步骤 5.创建产品控制器
在此步骤中,我们将使用以下命令创建一个新的产品控制器:
php artisan make:controller ProductController --resource
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);
}
}
步骤 6. 将产品路线添加到routes/api.php
文件:routes/api.php
use App\Http\Controllers\ProductController;
Route::get('/products', [ProductController::class, 'index']);
步骤 7. 创建新的 Pest 功能测试
php artisan pest:test ProductTest
文件: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);
});
it
Pest 中的vstest
函数
该it
函数是该函数的别名test
。这两个函数完全相同,您可以在编写测试时使用其中任何一个。该it
函数是为那些喜欢在编写测试时使用该it
函数的开发人员提供的。
步骤 8. 运行测试
php artisan test
或者您可以使用以下命令运行测试composer test
:
composer test
或者您可以使用以下命令运行测试vendor/bin/pest
:
./vendor/bin/pest
所有这些命令都会执行相同的测试。默认情况下,phpunit.xml
应用程序中包含的文件将指示测试运行器排除 vendor 和 node_modules 目录中的测试。
如果您想运行特定的测试,您可以使用以下--filter
选项:
php artisan test --filter ProductModelTest
或者您可以使用以下命令运行测试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