spatie/pest-plugin-route-testing

确保您的Laravel应用中所有路由都正常

1.0.1 2024-08-03 08:39 UTC

This package is auto-updated.

Last update: 2024-09-03 08:47:31 UTC


README

在典型的Laravel应用中,有许多用户可以访问的页面。很容易忘记测试它们。这个包使测试应用中所有GET路由变得简单。

这里有一个快速示例

use function Spatie\RouteTesting\routeTesting;

routeTesting('all GET routes')
   ->assertSuccessful();

这将测试应用中所有GET路由并确保它们返回200 HTTP状态码。这里是在一个小型应用中运行此测试时的输出。

screenshot

除了assertSuccessful(),您还可以使用Laravel的TestResponse类中可用的任何断言,例如assertRedirect()assertNotFound()assertForbidden()等。

您还可以测试特定路由

use function Spatie\RouteTesting\routeTesting;

routeTesting('all blog routes')
    ->include('blog*')
    ->assertSuccessful();

如果存在具有路由模型绑定的路由,则该包将跳过这些路由的测试。假设您有一个定义为user/{user}的路由。这里是在运行测试时的输出。

screenshot

如果您想测试具有路由模型绑定的路由,您可以使用bind方法提供模型。

use function Spatie\RouteTesting\routeTesting;
use App\Models\User;

routeTesting('all blog routes')
    ->bind('user', User::factory()->create())
    ->assertSuccessful();

现在运行测试时,该包将使用提供的模型来测试路由。

screenshot

支持我们

我们在创建一流的开放式源代码包上投入了大量资源。您可以通过购买我们的付费产品之一来支持我们。

我们非常感谢您从家乡寄给我们明信片,说明您正在使用我们的哪个包。您可以在我们的联系页面上找到我们的地址。我们将在我们的虚拟明信片墙上发布所有收到的明信片。

安装

您可以通过composer安装此包

composer require spatie/pest-plugin-route-testing

用法

您可以使用routeTesting函数测试应用中的所有路由。

use function Spatie\RouteTesting\routeTesting;

routeTesting('all routes')
    ->assertSuccessful();

这将测试应用中所有GET路由并确保它们返回200 HTTP状态码。这里是在一个小型应用中运行此测试时的输出。

screenshot

除了assertSuccessful(),您还可以使用Laravel的TestResponse类中可用的任何断言,例如assertRedirect()assertNotFound()assertForbidden()等。

以下是一个测试重定向是否正常工作的示例。

use function Spatie\RouteTesting\routeTesting;

routeTesting('redirect')
    ->include('old-section/*')
    ->assertRedirect('new-section/*');

测试特定路由

您可以通过使用include方法测试特定路由。支持通配符。以下是一个测试所有以blog开头的路由的示例。

use function Spatie\RouteTesting\routeTesting;

routeTesting('all blog routes')
    ->include('blog*')
    ->assertSuccessful();

您也可以向include方法传递任意多的参数。

use function Spatie\RouteTesting\routeTesting;

routeTesting('all blog routes')
    ->include('blog*', 'post*')
    ->assertSuccessful();

排除路由

如果您想从测试中排除路由,您可以使用exclude方法。以下是一个测试所有不以admin开头的路由的示例。

use function Spatie\RouteTesting\routeTesting;

routeTesting('all blog routes')
    ->exclude('admin*')
    ->assertSuccessful();

绑定路由模型绑定

如果存在具有路由模型绑定的路由,则该包将跳过这些路由的测试。假设您有一个定义为user/{user}的路由。这里是在运行测试时的输出。

screenshot

如果您想测试具有路由模型绑定的路由,您可以使用bind方法提供模型。

use function Spatie\RouteTesting\routeTesting;
use App\Models\User;

routeTesting('all blog routes')
    ->bind('user', User::factory()->create())
    ->assertSuccessful();

现在运行测试时,该包将使用提供的模型来测试路由。

screenshot

如果您不想显示因缺少模型绑定而跳过的测试,您可以调用ignoreRoutesWithMissingBindings()

use function Spatie\RouteTesting\routeTesting;

routeTesting('all blog routes')
    ->ignoreRoutesWithMissingBindings()
    ->assertSuccessful();

在测试之前执行自定义代码

您可以使用setUp方法在路由测试运行之前执行代码。以下是在运行测试之前登录用户的示例。

use function Spatie\RouteTesting\routeTesting;

routeTesting('all admin routes')
    ->setUp(function ()
    {
        $user = User::factory()->create();
        
        $this->actingAs($user);
        
        // optionally, you could also bind the model
        $this->bind('user', $user);
    })
    ->include('admin*')
    ->assertSuccessful();

测试

composer test

变更日志

有关最近更改的更多信息,请参阅变更日志

贡献

有关详细信息,请参阅贡献

安全漏洞

请查阅我们的安全策略,了解如何报告安全漏洞:安全策略

致谢

许可证

MIT 许可证(MIT)。更多信息请参阅许可证文件